本文作者:开源技术之家

是你想要的吗?【springboot】配置多数据源动态切换

开源技术之家 1个月前 ( 07-09 ) 124 抢沙发

多数据源切换,首先需要实例化多个数据源DataSource,这里以两个数据源为例,多个数据源类似。程序的处理单元是线程,所以我们借助ThreadLocal动态设置当前线程的数据源实例。最后我们需要写一个AOP,拦截需要切换数据源的方法,在拦截器里实现数据源修改。项目以springboot2结合druid,mysql,mybatis为例。
1.首先创建两个数据库,分别为first和second,简单创建一张表各插入一条数据作为演示:   

first数据库,表t_user

second数据库,表t_user

----
2.实例化两个数据源,简单配置下数据源相关属性:
com.mysql.cj.jdbc.Driver
      jdbc:mysql://127.0.0.1:3306/first?charset=utf8mb4&useSSL=false
      root
      123456
    com.mysql.cj.jdbc.Driver
      jdbc:mysql://127.0.0.1:3306/second?charset=utf8mb4&useSSL=false
      root
      123456

初始化动态数据源,设置默认数据源,根据key路由到对应数据源

DruidDataSourceConfiguration DataSource DruidDataSourceBuilder..buildDataSource DruidDataSourceBuilder..buildDynamicDataSource DataSource firstDataSourceDataSource secondDataSourceDynamicDataSource dynamicDataSource = DynamicDataSourcedynamicDataSource.setDefaultTargetDataSourcefirstDataSourceMapObjectObjecttargetDataSources = HashMaptargetDataSources.putfirstDataSourcetargetDataSources.putsecondDataSourcedynamicDataSource.setTargetDataSourcestargetDataSourcesdynamicDataSource
在ThreadLocal中设置线程持有的数据源:
DynamicDataSource AbstractRoutingDataSource ThreadLocalString= ThreadLocalString name.infoname.setnameString .get.removeObject .infoDynamicDataSource.DynamicDataSource.

----

3.编写自定义注解,需要切换数据源的地方添加注解:

ElementType.RetentionPolicy.@String

----

4.编写AOP,处理自定义注解

DynamicDataSourceAspect =dataSource= dataSourceDynamicDataSource.dataSource.value= dataSourceDynamicDataSource.

----

5.测试,使用idea插件EasyCode快速生成代码,参见EasyCode插件使用

TUser String datatsourceInteger id.equalsdatatsource..queryByIdSecondid..queryByIdid
在service中添加一个自定义注解的方法:
TUser Integer id..queryByIdidTUser Integer id..queryByIdid
----
6.验证结果:

总结:

借助抽象类AbstractRoutingDataSource可以根据key路由目标数据源,在需要切换数据源的地方手动标记,切换到对应的数据源即可。

【end】

本篇文章来源于微信公众号:                         码农小麦

本文标题:是你想要的吗?【springboot】配置多数据源动态切换
本文链接:https://www.kyjszj.com/sjkzq/2293.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
文章版权及转载声明

作者:开源技术之家本文地址:https://www.kyjszj.com/sjkzq/2293.html发布于 1个月前 ( 07-09 )
文章转载或复制请以超链接形式并注明出处开源技术之家

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,124人围观)参与讨论

还没有评论,来说两句吧...