Spring事务什么时候会失效?
- 我们使用Spring事务也基本都是声明式事务,直接给个注解
@Transactional
就行了
spring声明式事务的原理是
AOP
,进⾏了切⾯增强,那么失效的根本原因是这个AOP不起作⽤了!
- 常⻅情况有 如下⼏种
- 数据库不⽀持事务 -> 数据库就
没有开启关闭提交的功能
- 没有被Spring管理 -> 首先要是一个
Spring的Bean才能使用AOP
- Spring被代理方法必须是public的 -> @Transactional注解
只能⽤于 public 的⽅法
上,否则事务失效- cglib动态代理是基于继承来实现的
- 继承对访问权限是有要求的,子类不能去继承父类private的方法
- 传播机制写错了 -> 写了个
NEVER丶NOT_SUPPORTED
,本就是不使用事务 - 方法内部调用 -> 方法是
对象本身调用的,不是代理类调用
的,不会触发AOP的before丶after
,就不能开启事务 - 异常被解决了,事务不会回滚 ->
自己用try-catch解决了异常,没有抛出异常
,肯定是会失效的