spring事务失效场景
1.方法不是public修饰的,,spring事务的实现AbstractFallbackTransactionAttributeSource类的computeTransactionAttribute方法中有个判断,如果目标方法不是public,则TransactionAttribute返回null,即不支持事务。
2.方法被final修饰,spring事务底层原理是用的aop,而aop通过代理模式生成代理类,被final修饰的方法不能被重写。
3.方法被static修饰,因为静态方法是属于类的,而不是属于对象的,无法重写静态方法所以也就不可能实现事务。
4.同一个类中调用其他的事务方法,解决办法:方法分到另外的service里面再注入调用。
5.没有被spring管理的对象。
6.多线程调用,不同的线程,不同的数据库连接,事务也不是同一个。
7.设计的表的数据库引擎不支持事务,如myisam。
8.没有开始事务,springboot默认开启,spring项目需要在配置文件中开启。
9.错误的事务传播行为 @Transactional(propagation =)目前支持事务的三种传播特性为:REQUIRED,REQUIRES_NEW,NESTED
10.try catch了异常/手动抛出了别的异常。(嵌套事务想回滚部分的时候,可以把不想回滚的trycatch包起来)
11.rollbackfor指定异常类型后,只会出现相对应的异常的时候才会回滚。

浙公网安备 33010602011771号