在我们实际业务开发中,难以避免需要同时涉及多个数据库,可能一个API中所需要的数据,往往是包含了多个数据库中的数据,
这个时候我们就需要在项目运行中,切换数据源。 那为什么会有这篇文章呢,那是因为小编在使用mybatis-plus这个框架,明明一个多数据源配置很简单,但是网上其他博客着实太过于复杂了。
从数据源配置、每一个数据源配置一个config类、配置枚举类、还有需要自己实现AOP的,当时小编就在想mybatis-plus是为简化而生,怎么搞这么复杂。
接下来不要眨眼,很快就实现了。
步骤一:我们先需要引入maven配置,这里小编是使用3.1.0版本,可自选。dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
步骤二:多数据源配置,需要注意的后面都有写注释。
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
datasource:
master:
url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
slave_2:
url: ENC(xxxxx) # 内置加密,使用请查看详细文档
username: ENC(xxxxx)
password: ENC(xxxxx)
driver-class-name: com.mysql.jdbc.Driver
schema: db/schema.sql # 配置则生效,自动初始化表结构
data: db/data.sql # 配置则生效,自动初始化数据
continue-on-error: true # 默认true,初始化失败是否继续
separator: ";" # sql默认分号分隔符
步骤三:步骤三就可以直接使用啦,真的是太方便了,@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
/**
* 数据源切换测试
*
* @author IT 贱男
* description:
* date: 2021/2/25 18:01
*/
@Service
@AllArgsConstructor
public class TestJdbcServiceImpl implements TestJdbcService {
// 数据库1的mapper
private final KkOrderMapper kkOrderMapper;
// 数据库2的mapper
private final SysUserMapper sysUserMapper;
// 不写DS默认是主数据源
@Override
public void testMySql1() {
List<KkOrder> kkOrders = kkOrderMapper.selectList(null);
System.out.println(kkOrders.size());
}
// 注解里面填写多数据源配置的名字
@DS("slave_1")
@Override
public void testMysql2() {
List<SysUser> sysUsers = sysUserMapper.selectList(null);
System.out.println(sysUsers.size());
}
}
建议
_
分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。spring.datasource.dynamic.primary
修改。特性
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://jiannan.blog.csdn.net/article/details/114100901
内容来源于网络,如有侵权,请联系作者删除!