springboot多数据源配置及切换
注:本文的多数据源配置及切换的实现方法是,在框架中封装,具体项目中配置及使用,也适用于多模块项目
配置文件数据源读取
通过springboot的Envioment和Binder对象进行读取,无需手动声明DataSource的Bean
yml数据源配置格式如下:
spring:
datasource:
master:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/main?
useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: 11111
cluster:
- key: db1
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/haopanframetest_db1?
useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: 11111
- key: db2
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/haopanframetest_db2?
useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: 11111
master为主数据库必须配置,cluster下的为从库,选择性配置
获取配置文件信息代码如下
动态加入数据源
定义获取数据源的Service,具体项目中进行实现
获取对应Service的所有实现类进行调用
通过代码进行数据源注册
主要是用过继承类AbstractRoutingDataSource,重写setTargetDataSources/setDefaultTargetDataSource方法
通过切面注解统一切换
定义注解
定义基于线程的切换类
定义切面
方法的注解优先级高于类注解,一般用于Service的实现类
分库切换
开发过程中某个库的某个表做了拆分操作,相同的某一次数据库操作可能对应到不同的库,需要对方法级别进行精确拦截,可以定义一个业务层面的切面,规定每个方法必须第一个参数为dbName,根据具体业务找到对应的库传参

浙公网安备 33010602011771号