这种情况的事物失效,我保证50%的java程序员不知道

155 阅读1分钟

相信大家首先想到的是一下几种情况

1.事物方法所在了类没有被spring管理,比如直接在本类调用事物方法(对象引用的是this未被代理)
2.事务注解在的方法非public,或者被final修饰(final修饰不能被继承代理)
3.可能捕捉的异常和抛出的异常不在父类(含)下面
4.可能方法里面写了try catch 手动捕捉了异常
5.事物方法写了多线程,多线程操作库表

下面这种情况,平时只负责crud估计容易忽略(昨天我的一个朋友就遇到了)

就是在多数据源的情况下面,需要制定事物管理器。

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource primaryDataSource) {
        return new DataSourceTransactionManager(primaryDataSource);
    }
 
    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
        return new DataSourceTransactionManager(secondaryDataSource);
    }
}