前言 最近用到了多数据源,所以看了一个多数据源的框架,dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。
其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x 。
约定
本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作 ,切换了数据源可以做任何CRUD。
配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
方法上的注解优先于类上注解。
DS支持继承抽象类上的DS,暂不支持继承接口上的DS。
使用方法 1、引入依赖
1 2 3 4 5 <dependency > <groupId > com.baomidou</groupId > <artifactId > dynamic-datasource-spring-boot-starter</artifactId > <version > ${version}</version > </dependency >
2、配置数据源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 spring : datasource : dynamic : primary : master #设置默认的数据源或者数据源组,默认值即为master strict : false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource : master : url : jdbc:mysql://xx.xx.xx.xx:3306/dynamic username : root password : 123456 driver-class-name : com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 slave_1 : url : jdbc:mysql://xx.xx.xx.xx:3307/dynamic username : root password : 123456 driver-class-name : com.mysql.jdbc.Driver slave_2 : url : ENC(xxxxx) # 内置加密,使用请查看详细文档 username : ENC(xxxxx) password : ENC(xxxxx) driver-class-name : com.mysql.jdbc.Driver
1 2 3 4 5 6 7 8 9 10 # 多主多从 纯粹多库(记得设置primary) 混合配置 spring: spring: spring: datasource: datasource: datasource: dynamic: dynamic: dynamic: datasource: datasource: datasource: master_1: mysql: master: master_2: oracle: slave_1: slave_1: sqlserver: slave_2: slave_2: postgresql: oracle_1: slave_3: h2: oracle_2:
3、使用 @DS 切换数据源。
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解 。
注解
结果
没有@DS
默认数据源
@DS(“dsName”)
dsName可以为组名也可以为具体某个库的名称
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Service @DS("slave") public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; public List selectAll () { return jdbcTemplate.queryForList("select * from user" ); } @Override @DS("slave_1") public List selectByCondition () { return jdbcTemplate.queryForList("select * from user where age >10" ); } }