3、多数据源配置的的问题和使用
前言
Github:https://github.com/HealerJean
一、多数据源配置
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);
}