mybatisplus多数据源事务
时间: 2023-09-01 17:12:51 浏览: 104
Mybatis-Plus 多数据源事务配置可以通过 Spring Boot 中的 TransactionAutoConfiguration 自动配置类来实现。
1. 首先,在 application.properties 或 application.yml 中配置多个数据源的相关信息。
```
# 数据源 1
spring.datasource.datasource1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.datasource1.username=root
spring.datasource.datasource1.password=123456
spring.datasource.datasource1.driver-class-name=com.mysql.jdbc.Driver
# 数据源 2
spring.datasource.datasource2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.datasource2.username=root
spring.datasource.datasource2.password=123456
spring.datasource.datasource2.driver-class-name=com.mysql.jdbc.Driver
```
2. 创建多个数据源的 DataSource 对象,并注册到 Spring 的 Bean 容器中。
```
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.datasource1")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.datasource2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
}
```
3. 配置 Mybatis-Plus 的 SqlSessionFactory 和 TransactionManager,指定对应的数据源。
```
@Configuration
@MapperScan(basePackages = {"com.example.mapper"})
public class MybatisPlusConfig {
@Bean(name = "sqlSessionFactory1")
public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
return sqlSessionFactory.getObject();
}
@Bean(name = "sqlSessionFactory2")
public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
return sqlSessionFactory.getObject();
}
@Bean(name = "transactionManager1")
public DataSourceTransactionManager transactionManager1(@Qualifier("dataSource1") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "transactionManager2")
public DataSourceTransactionManager transactionManager2(@Qualifier("dataSource2") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
```
4. 在需要进行事务管理的方法上使用 @Transactional 注解,并指定对应的 TransactionManager。
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper1;
@Autowired
private UserMapper userMapper2;
@Transactional(transactionManager = "transactionManager1")
public void addUser1(User user) {
userMapper1.insert(user);
}
@Transactional(transactionManager = "transactionManager2")
public void addUser2(User user) {
userMapper2.insert(user);
}
}
```
这样,就可以实现多数据源的事务管理了。注意,如果需要在同一个方法中操作多个数据源,需要手动处理事务。
阅读全文