SpringBoot学习笔记之动态数据源切换

Springboot 动态数据源切换
1)、配置文件application.properties
# 更多数据源
custom.datasource.names=ds1,ds2
custom.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver custom.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
custom.datasource.ds1.username=root
custom.datasource.ds1.password=123456
custom.datasource.ds2.driver-class-name=com.mysql.jdbc.Driver custom.datasource.ds2.url=jdbc:mysql://localhost:3306/ds2
custom.datasource.ds2.username=root
custom.datasource.ds2.password=123456

2)、配置文件中加上配置
#mybatis配置
mybatis.typeAliasesPackage=com.vk.liyj
#匹配mapper下的所有mapper.xml
#mybatis.mapperLocations=classpath:com/vk/liyj/mapper/*Mapper.xml
#匹配指定包下的所有mapper.xml
mybatis.mapperLocations=classpath*:com/vk/liyj/**/*Mapper.xml

3)、动态数据源切换相关代码在dynamicDataSource包下
TargetDataSource为我们自定义的annotation。
DynamicDataSourceRegister类为数据源动态切换的核心类。该类实现了ImportBeanDefinitionRegistrar和EnvironmentAware这两个接口,这两个接口在系统启动时被分别调用。这两个接口的执行是有先后顺序的,EnvironmentAware接口的setEnvironment方法会先被执行完成默认数据源和自定义数据源的初始化,然后再执行ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法完成默认数据源和目标数据源的注册。
DynamicDataSourceContextHolder类中使用了ThreadLocal来保存当前线程使用的数据源,当前线程id是key,value是数据源名称。dataSourceIds用于保存系统配置的数据源名称。
DynamicDataSourceAspect是AOP类,主要完成前置和后置功能加强。该类中有两个要注意的地方,@Aspect必须引用,表示这是一个AOP类,@Order(-1)表示该类要被AOP链式调用时优先被执行。
DynamicDataSource类继承了AbstractRoutingDataSource类,在执行service方法调用之前被调用该方法获取数据源。

4)、在SpringBootSampleApplication中启动类注册动态数据源
//注册动态多数据源
@Import({DynamicDataSourceRegister.class})
//启注解事务管理,等同于xml配置方式的 <tx:annotation-driven />
@EnableTransactionManagement

5)、在需要切换数据源的地方增加TargetDataSource注解,ds2就是我们配置在properties中的名字。Transactional表示该方法使用事务控制。
@Transactional
@TargetDataSource(name = "ds2")

5)、导入ds1,ds2数据库脚本

6)、SpringBootTest 中的testDS1(),testDS2(),testDefaultDS(),testDefaultDSAdd()进行测试。

源码下载地址:http://download.csdn.net/download/liyuejin/9986140

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值