由于工作需要,2020年便初步了解了多数据源切换,通过网上多个资料查询和学习,实现了初版的多数据源动态切换,最近又因为工作需要分库分表,考虑到想要成熟的分库分表的实现,自己并不打算重写,所以通过网上的资料学习,又升级了一套已经成熟的多数据源切换方案。本次记录整理主要是用来做两个方案实现的记录和比较,加深学习的理解和印象,大家如有想法可以多多指点,感谢。
一、基于搭建好的SpringBoot应用,相关SDK版本如下:
<!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>
二、多数据源配置文件
1、应用的application.yml 或 application-*env*.yml。
此时的数据源配置已不符合springBoot自带的数据源读取configuration前缀匹配规范,因此无法获取到数据源,启动应用会报错。
spring:
jooq:
sql-dialect: mysql
datasource:
standard:
ds0:
jdbc-url: jdbc:mysql://?allowMultiQueries=true
driver-class-name: com.mysql.cj.jdbc.Driver
username:
password:
ds1:
jdbc-url: jdbc:mysql://?allowMultiQueries=true
driver-class-name: com.mysql.cj.jdbc.Driver
username:
password:
ds2:
jdbc-url: jdbc:mysql://?allowMultiQueries=true
driver-class-name: com.mysql.cj.jdbc.Driver
username:
password:
ds3:
jdbc-url: jdbc:mysql://?allowMultiQueries=true
driver-class-name: com.mysql.cj.jdbc.Driver
username:
password:
三、数据源动态切换实现
1、创建线程管理类