Spring事务什么时候会失效
Spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了!
常见情况有一下几种:
1、发生自调用。类里面使用this调用本类方法(this通常省略),此时这个this不是代理类,而是UserService本身。
2、方法不是public。@Transactional只能用于public的方法上,否则事务会失效,如果要用在非public方法上,可以开启AspectJ代理模式。
3、数据库不支持事务。
4、没有被Spring管理。
5、异常被吃掉,事务不会回滚。(或者抛出的异常没有被定义,默认为RuntimeException)