MybatisPlus作为mybatis的增强工具,提供了配置多数据源的扩展,通过简单的3步配置,即可使用注解轻松切换数据源。
1. 引入坐标
<!-- dynamic-datasource多数据源坐标-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.6.1</version>
</dependency>
2. 配置数据源
spring:
#mysql 数据源
datasource:
type: com.zaxxer.hikari.HikariDataSource
dynamic:
primary: master # 默认主库名为master
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url:jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?xxxxxx
username: xxxxxxx
password: xxxxxxx
secondary:
driver-class-name: com.mysql.cj.jdbc.Driver
url:jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?xxxxxx
username: xxxxxxx
password: xxxxxxx
third:
driver-class-name: com.mysql.cj.jdbc.Driver
url:jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?xxxxxx
username: xxxxxxx
password: xxxxxxx
3. 在方法或者类上使用@DS切换数据源
a. DS注解既可以写在类上,也可以写在方法上,方法上的优先级高于类。
b. 如果没有指定DS的属性值或者没有使用DS注解,就自动走master主库。
通过以上3步,就可以轻松使用切换多数据源的能力了。当然,除了支持主从模式,还支持多主多从、多库,混合模式。
@Service
@DS("secondary")
public class ServiceImpl implements Service {
@Override
public List List() {
// TODO......
return null;
}
@Override
@DS("master")
public List master() {
// TODO......
return null;
}
@Override
@DS("secondary")
public List secondary() {
// TODO......
return null;
}
@Override
@DS("third")
public List third() {
// TODO......
return null;
}
原理探究
- 打开dynamic-datasource-spring-boot-starter.jar包,在spring.factories文件中,可以看到配置了DynamicDataSourceAutoConfiguration启动类。
- 打开DynamicDataSourceAutoConfiguration类,可以看到通过@AutoConfigureBefore注解,提前初始化了MP自己的DataSource数据源。
- 而DataSourceAutoConfiguration类的核心作用就是初始化DataSrouce,MP通过抢先配置的方式,使DataSource变成了自己指定的数据源。
除了初始化MP自己的数据源,DynamicDataSourceAutoConfiguration类还做了一些其他的初始化工作,比如DynamicDataSourceProperties配置,初始化DS注解的切面Advisor等。
初始化工作做完以后,接下来就是根据DS注解判断走哪个数据源了。
- DynamicDataSourceAnnotationInterceptor类是一个方法拦截器,它的invoke里面有判断DS key的操作。
- 在determineDatasourceKey方法中,会调用提前注入DataSourceClassResolver类的findKey方法,判断类或者方法上是否指定了DS注解。
.......
标签:jdbc,数据源,xxx,master,切换,mysql,DS,解说 From: https://www.cnblogs.com/yswsxf/p/17721979.html