事务
1)默认配置下 Spring 只会回滚运行时异常(非受检查异常),即继承自 RuntimeException 的异常或者 Error。(官网)
2)@Transactional 注解只能应用到 public 修饰的方法。(官网)
几个常见的事务失效场景
@Transactional 应用在非 public 修饰的方法上
@Transactional 注解回滚异常属性 rollbackFor 设置错误
@Transactional 注解传播属性 propagation 设置错误
同类中内部方法相互调用,默认代理模式下,如果调用者自己已经有事务,则被调用的永远和它处于同一事务。被调用者的设置的 REQUIRES_NEW、NOT_SUPPORTED、NEVER 等等都不会有效,
同类中内部方法相互调用,调用者方法自己没有事务,自己也未加 @Transactionl,此时被调用方法上面即使加了 @Transaction,事务也不会生效。因为此时它不是使用的代理方式调用的,而是 this.xx调用的。
异常被 catch 捕获,没有继续往外抛,导致 @Transactional 失效
数据库存储引擎不支持事务导致失效
抛出的异常不正确,默认只回滚 RuntimeException(运行时异常)和 Error(错误)
多线程影响
事务方法被final、static修饰
当前类没有被Spring管理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Monster龙!