前言:在工作中,某些情况下需要同时对多个数据库进行更改操作。

pom.xml文件添加maven

1
2
3
4
5
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.5</version>
</dependency>

yml文件添加多个数据库信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
datasource:
master:
url: jdbc:mysql://localhost:3306/db_one?useUnicode=false&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
twoDB:
url: jdbc:mysql://localhost:3306/db_two?useUnicode=false&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver

mapper层使用多数据源

正常使用的时候我们只会加载master的数据库,哪怕是执行twoDB的数据库时会报找不到表结构

在mapper层使用多数据源的优点是 只对sql有影响,当然他也可以在service层使用

1
2
3
4
import com.baomidou.dynamic.datasource.annotation.DS;

@DS("twoDB")
public interface TwoDBMapper {

service层使用并添加多数据源事务

在service实现类里面 编写方法 可以把多个数据库的操作联系起来,并添加事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;

@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Autowired
TwoDBMapper twoDBMapper;

@DSTransactional
public void addUser() {
//第一个数据库的增删改
//第二个数据库的增删改
}
}