在日常开发中,我们经常有在一个方法中使用俩种以上的数据源,针对这种需求,我们可以使用dynamic的手动切换数据源来实现。
一.引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
二.配置yml
spring:
datasource:
dynamic:
#设置默认的数据源或者数据源组,默认值即为datasource1
primary: ds1
#严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
strict: false
datasource:
ds1:
url: jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
ds2:
url: jdbc:mysql://127.0.0.1:3306/db2?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
三.手动切数据源
@Service
@DS("db1")
public class TestService {
public void test(){
//因为service上默认是db1,所以着里面的代码会走db1
try {
//手动开启db2数据源
DynamicDataSourceContextHolder.push("db2");
//todo 具体业务逻辑
} finally {
//使用完必须手动关闭,不然下面都会使用db2
DynamicDataSourceContextHolder.poll();
}
}
}
同样,多个数据源也一样