相信大家首先想到的是一下几种情况
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);
}
}