SpringBoot多数据源事务如何管理
warning:
这篇文章距离上次修改已过429天,其中的内容可能已经有所变动。
在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的事务中运行。
评论已关闭