SpringBoot多数据源事务如何管理
在Spring Boot中管理多数据源事务,可以使用@Transactional
注解结合@Primary
注解指定主数据源,并为每个数据源创建独立的PlatformTransactionManager
Bean。以下是一个简化的示例:
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
@Service
public class DataService {
@Transactional("primaryTransactionManager")
public void performPrimaryTask() {
// 执行主数据源的操作
}
@Transactional("secondaryTransactionManager")
public void performSecondaryTask() {
// 执行次数据源的操作
}
}
在这个配置中,我们定义了两个数据源primaryDataSource
和secondaryDataSource
,并为每个数据源创建了相应的PlatformTransactionManager
Bean。在DataService
中,通过为@Transactional
注解指定transactionManager名称,我们可以为不同的方法指定不同的事务管理器。
确保在application.properties
或application.yml
中正确配置了数据源属性,例如:
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary
spring.datasource.primary.username=primaryUser
spring.datasource.primary.password=primaryPass
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary
spring.datasource.secondary.username=secondaryUser
spring.datasource.secondary.password=secondaryPass
这样配置后,performPrimaryTask
方法将在primaryDataSource
的事务中运行,performSecondaryTask
方法将在secondaryDataSource
的事务中运行。
评论已关闭