什么?不知道 MyBatisPlus 多数据源(动态数据源)干什么的,怎么使用,看这篇文章就够了。
13.12 多数据源
随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。本文将介绍两种 MyBatis-Plus 的多数据源扩展插件:开源生态的
dynamic-datasource
和 企业级生态的mybatis-mate
。这里介绍开源生态的dynamic-datasource
,我这里是 SpringBoot3,SpringBoot2的导入依赖有所差异,具体参照 – 官网
13.12.1 使用步骤
13.12.1.1 导入依赖
SpringBoot2 导入的依赖和这个不一样,具体参照官网
<!-- 导入动态数据源依赖 -->
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot3-starter</artifactId><version>4.3.1</version>
</dependency>
13.12.1.2 配置动态数据源
spring:datasource:dynamic:# 设置默认数据源, 当没有指定数据源时/或者指定数据源不存在,都会默认使用该数据primary: master # 是否严格匹配数据源,当指定数据源不存在时,是直接报错还是采用默认的数据源strict: false datasource: # 多数据配置master: #主数据源名称url: jdbc:mysql://localhost:3306/db2username: rootpassword: 123456
# driver-class-name: com.mysql.cj.jdbc.Driver 可以省略不写slave: #从数据源名称url: jdbc:mysql://localhost:3306/db1username: rootpassword: 123456
# driver-class-name: com.mysql.cj.jdbc.Driver 可以省略不写
13.12.1.3 @DS 切换数据源
这个注解不仅可以作用到类上,同样可以作用到方法上,根据 “就近原则” 当两个同时存在时,方法上的优先
13.12.1.4 测试代码演示
@SpringBootTest
class WorkDay07Task01ApplicationTests {//只要在两个Service上配置的数据源不同,两个访问的是不同的数据库@Autowiredprivate UserServiceImpl service;@Autowiredprivate AccountServiceImpl accountService;@Testvoid test01() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("id", 1214840833);service.getOne(wrapper);}@Testvoid test02() {QueryWrapper<Account> wrapper = new QueryWrapper<>();wrapper.eq("id", 1);accountService.getOne(wrapper);}
}