前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

一、多数据源配置

1、dynamic-datasource-spring-boot-starter

1)pom

<!--数据源-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.6.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${com-alibaba-druid.version}</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.45</version>
</dependency>

2)yml

####################################
### DB
####################################
spring:
  redis:
    host: 127.0.0.1
    port: 6379
  datasource:
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为master
      primary: healerjean
      # 设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源
      strict: true
      druid:
        # 初始化时建立物理连接的个数
        initialSize: 5
        # 最小连接池数量
        minIdle: 5
        # 最大连接池数量
        maxActive: 20
        # 获取连接等待超时时间
        maxWait: 60000
        ## 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        ## 连接保持空闲而不被驱逐的最小时间
        minEvictableIdleTimeMillis: 300000
        # 用来检测连接是否有效的sql,要求是一个查询语句
        validationQuery: SELECT 1 FROM DUAL
        # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
        testWhileIdle: true
        # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
        testOnBorrow: false
        # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
        testOnReturn: false
        #打開PSCache,並指定每個連接上PSCache的大小。oracle設爲true,mysql設爲false。分庫分表較多推薦設置爲false
        pool-prepared-statements: false
        max-pool-prepared-statement-per-connection-size: 20
        stat:
          #日志输出执行慢的SQL
          log-slow-sql: true
          #slowSqlMillis的缺省值为3000,也就是3秒。
          slow-sql-millis: 2000
      datasource:
        healerjean:
          # 3.2.0开始支持SPI可省略此配置
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/healerjean?characterEncoding=utf-8&useUnicode=true&autoReconnect=true&connectTimeout=3000&initialTimeout=1&socketTimeout=5000&useSSL=false&serverTimezone=CTT
          username: root
          password: 12345678
        test:
          # 3.2.0开始支持SPI可省略此配置
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useUnicode=true&autoReconnect=true&connectTimeout=3000&initialTimeout=1&socketTimeout=5000&useSSL=false&serverTimezone=CTT
          username: root
          password: 12345678



3)样例 @DS(DateSourceConstant.SLAVE_TEST)

@DS(DateSourceConstant.SLAVE_TEST)
@ApiOperation(value = "用户信息-单条查询", notes = "用户信息-单条查询-描述")
@RedisCache(RedisConstants.CacheEnum.COMMON)
@LogIndex
@GetMapping("user/{userId}")
@ResponseBody
public BaseRes<UserDemoVO> selectById(@ElParam @PathVariable("userId") Long userId) {
    UserDemoBO userDemoBo = userDemoService.selectById(userId);
    UserDemoVO userDemoVo = UserConverter.INSTANCE.covertUserDemoBoToVo(userDemoBo);
    return BaseRes.buildSuccess(userDemoVo);
}

ContactAuthor