在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个DB之间切换方面。这里给出一个动态数据源的配置方案,两个DB均以mysql为例。
多数据源配置引入
mybatis和mysql在springboot中的引入这里就不在说了,不了解的可以参见springboot中mysql与mybatis的引入。
数据源配置如下:
1  | yml复制代码datasource:  | 
mybatis的配置引入如下:
1  | yml复制代码mybatis:  | 
这里已然使用的是springboot的自动配置功能配置mybatis信息,只是手动指定了数据源的。如下所示,指定了master和log两个数据源,设置master为默认数据源:
1  | java复制代码@Configuration  | 
动态数据源路由实现
引入了配置信息之后,便是该说如何实现多数据源切换了。我们是通过实现AbstractRoutingDataSource类的determineCurrentLookupKey方法来实现数据源的动态路由,设置ThreadLocal线程保护变量存储数据源key,确保线程间不受影响。
1  | java复制代码package com.lazycece.sbac.mysql.multi.config;  | 
随后,便是用AOP的方式来实现数据源的动态切换,注解和切面定义如下:
1  | java复制代码@Documented  | 
动态数据源切换使用
动态数据源切换只需要在业务中使用@DataSource注解来标明需要使用的数据源即可,如下所示(这里只贴出关键代码):
1  | java复制代码@Service  | 
案例源码
案例源码地址: github.com/lazycece/sp…
本文转载自: 掘金