Spring Boot+MyBatis+Druid多数据源配置
技术分享|2020-3-3|最后更新: 2023-9-4
type
status
date
slug
summary
tags
category
icon
password
order

环境

SpringBoot+SpringMVC+MyBatis Plus+Druid

思路

主要是利用AbstractRoutingDataSource动态切换数据源,AOP配合注解,在有数据源注解的方法执行的时候,根据注解值切换到对应的数据源,然后执行方法,前置通知或者环绕通知都可以。

开始配置

首先是配置下mysql数据源信息,在application.yml中的spring下的datasouce下的druid节点,如果有多个数据源直接写多个就行,比如我这里是dbAdmin和dbAnother
然后新建个配置文件DruidConfig,配置下过滤器,数据源,面板账户密码等等
新建一个枚举DataSourceEnum,有哪些数据源要切换,就写哪些
新建一个DataSourceContextHolder,内部用ThreadLocal保存当前数据源的key,和上面枚举的value对应
下面这个就很重要了,新建一个类继承自AbstractRoutingDataSource ,实现其方法determineCurrentLookupKey,就是从上面定义的DataSourceContextHolder中获取datasource的key
然后是MyBatis Plus的配置文件
新建个DataSource注解,作用于类或方法上,方便切换数据源,这里的默认值为DB_ADMIN
最后就是AOP切面的配置了,根据注解去切,我这里使用的环绕通知,为了注解作用于类上也可以,其下所有方法就用类上面的注解所配置的数据源,我里面先判断的方法是否有注解,其次才判断类的注解,所以方法注解的优先于类注解,可以在类上配置数据源1,在某些有需要的方法,单独配置数据源2即可。

使用

在需要的类或方法上添加注解
然后运行程序,调用对应方法, 如果成功的话,可以看到DataSourceAspect里会打印日志,如果没成功,请检查切面pointcut配置是否有问题,是否能切到。

待填坑

分布式事务
 
Spring中实现单点Redis分布式锁Spring笔记-自动装配注解