前言:在工作中,某些情况下需要同时对多个数据库进行更改操作。
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 strict: 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() { } }
|