Java 通过注解实现多数据源(苞米豆)

一、流程

以下是实现多数据源的一般步骤:

1.添加依赖项:首先,你需要在你的Spring Boot项目中添加dynamic-datasource-spring-boot-starter依赖项,就像你提供的XML片段中所示。

2.配置数据源:在你的应用程序配置文件(如application.properties或application.yml)中配置多个数据源的连接信息,包括URL、用户名、密码等。

3.定义数据源:在你的应用程序中定义多个数据源的Bean,可以使用dynamic-datasource-spring-boot-starter提供的注解或者配置来定义这些数据源。

4.选择数据源:在需要访问特定数据源的地方,使用dynamic-datasource-spring-boot-starter提供的注解或者API来选择要使用的数据源。

5.使用数据源:在你的应用程序中,你可以像使用单个数据源一样使用多个数据源,包括执行SQL查询、更新等操作。 dynamic-datasource-spring-boot-starter提供了一些注解和配置来简化多数据源的配置和使用,具体的使用方法可以参考它的文档和示例。

二、引入maven依赖

   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version> <!-- 替换为你的MySQL版本 -->
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
    </dependencies>

三、数据库

两个数据库,分别添加分类表,其中biyesheji id=1 为奶茶 diancan的为奶茶专区(方便演示理解)
在这里插入图片描述

四、代码编写

1.实体类

package com.sss.demo.ceshi;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @description: 分类
 * @author: lw
 * @create: 2024-01-15 00:26
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Category {
    private   int  id;
    private String name;
}

2.service 层
此处继承了mp的basemapper

package com.sss.demo.ceshi;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Service;

@Service
public interface CategoryService extends BaseMapper<Category> {
}

3.Controller层

package com.sss.demo.ceshi;

import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;


/**
 * @description:
 * @author: lw
 * @create: 2024-01-15 00:40
 **/
@RestController
public class CategoryController {

    @Resource
    CategoryService categoryService;
    @DS("second")
    @GetMapping(value = "/ss")
    public Category productOrderReport( @RequestParam("id") Integer id) {
        Category category = categoryService.selectById(id);
        return category;
    }
    @GetMapping(value = "/sss")
    public Category productOrder( @RequestParam("id") Integer id) {
        Category category = categoryService.selectById(id);
        return category;
    }

    @GetMapping(value = "/test")
    public String productOrderReport() {

        return "1234";
    }


}

4.yml文件配置

server:
    port: 8080

spring:
    datasource:
        druid:
            stat-view-servlet:
                enabled: true # 启用Druid的监控页面
                url-pattern: /druid/* #:监控页面的访问路径
        dynamic:
            datasource:
                first:
                    driverClassName: com.mysql.cj.jdbc.Driver
                    password: 123456
                    type: com.alibaba.druid.pool.DruidDataSource
                    url: jdbc:mysql://127.0.0.1:3306/diancan?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
                    username: root
                second:
                    driverClassName: com.mysql.cj.jdbc.Driver
                    password: 123456
                    type: com.alibaba.druid.pool.DruidDataSource
                    url: jdbc:mysql://127.0.0.1:3306/biyesheji?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
                    username: root
            druid:
                filter:
                    stat:
                        log-slow-sql: true  #启用慢SQL记录,当SQL执行时间超过阈值时将会被记录下来
                        merge-sql: false #合并相同的SOL语句。
                        slow-sql-millis: 1000 #:定义慢S0L的国值,单位为毫秒,在这例子中,SQL被定义为执行时间超过1秒的SQL语句。
                    wall:
                        config:
                            multi-statement-allow: true #是否允许一次执行多条SQL语句。
                initial-size: 10 #连接池初始化时创建的连接数
                max-active: 100 #连接池中允许的最大活动连接数
                max-pool-prepared-statement-per-connection-size: 20 #每个连接上的预编译语句缓存的最大数量
                max-wait: 60000 #获取连接时的最大等待时间,单位为毫秒。
                min-evictable-idle-time-millis: 300000  # 连接空闲超过指定时间后将被断开,单位为毫秒
                min-idle: 10  #连接池中保持的最小空闲连接数
                pool-prepared-statements: true #是启用预编译功能
                test-on-borrow: false #从连接池中取出连接时是否进行有效性验证
                test-on-return: false #归还连接到连接池时是否进行有效性验证
                test-while-idle: true # 连接空闲时是否执行检查
                time-between-eviction-runs-millis: 60000 #连接回收线程运行的时间间隔,单位为毫秒
                validation-query: select 1 # 用于验证连接是否有效的SOL查询语句
            primary: first
mybatis-plus:
    configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

代码层
在这里插入图片描述

五、测试结果

在这里插入图片描述
其中ss 为biyesheji数据库数据 输出为奶茶

ss 为diancan数据库数据 输出为奶茶专区

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值