在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个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…
本文转载自: 掘金