一、MyBatis-Plus多数据源使用
1、简介
官方文档-多数据源扩展:https://baomidou.com/pages/a61e1b/#文档-documentation 多数据源详细文档(部分收费):https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
MyBatis-Plus多数据源是一个第三方 mybatis 扩展库。
使用时需要注意的一些约定:
- 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
- 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
- 切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
- 默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
- 方法上的注解优先于类上注解。
DS支持继承抽象类上的DS,暂不支持继承接口上的DS。
引入依赖:
com.baomidou
dynamic-datasource-spring-boot-starter
3.5.1
2.1 配置数据源
# 多数据源使用
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://localhost:3306/mybatis_db2?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
slave_2:
url: jdbc:mysql://localhost:3306/mybatis_db3?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# slave_2:
# url: ENC(xxxxx) # 内置加密,使用请查看详细文档
# username: ENC(xxxxx)
# password: ENC(xxxxx)
# driver-class-name: com.mysql.jdbc.Driver
#......省略
#以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2
2.2 使用 @DS 切换数据源
@DS 可以注解在方法上或类上,同时存在就近原则:方法上注解 优先于 类上注解。
@Service
//@DS("master") //指定数据源
//@DS("slave_1") //指定数据源
@DS("slave") //指定数据组,轮询slave_1和slave_2数据源
public class UserServiceImpl extends ServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
//...方法
}
2.3 测试
@Test
public void testGetById() {
System.out.println(("----- getById method test ------"));
UserDO userDO = userService.getById(11L);
System.out.println("userDO = " + userDO);
}
注意:轮询需要启动项目,通过浏览器访问就会轮询。
– 求知若饥,虚心若愚。