前言:在工作中,某些情况下需要同时对多个数据库进行更改操作。
pom.xml文件添加maven
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.5</version>
</dependency>
yml文件添加多个数据库信息
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层使用
import com.baomidou.dynamic.datasource.annotation.DS;
@DS("twoDB")
public interface TwoDBMapper {
service层使用并添加多数据源事务
在service实现类里面 编写方法 可以把多个数据库的操作联系起来,并添加事务
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() {
//第一个数据库的增删改
//第二个数据库的增删改
}
}