spring事务失效场景梳理

spring事务失效场景梳理

  1. @Transactional 应用在非 public 方法上

spring 事务底层在扫描 @Transactional 注解时会直接不会获取非 public 的方法上的 @Transactional 注解的属性信息

  1. @Transactional 的 rollbackFor 设置
  • 默认不设置的话,在 Error 和 RunTimeException 错误时会触发事务,其他异常不会;
  • rollbackFor 指定异常类型,则只会在该异常类型出现时触发事务;
  1. 同一个类中的方法调用

同一个类中,methodA 没有设置事务,methodB 设置了事务,methodA 调用 methodB 时,事务失效;

只有当事务方法被当前类以外的代码调用时,才会由 spring 生成代理对象管理事务;

  1. 异常被 catch 住了,不会再触发事务

在业务代码中一般不需要 catch 异常,如果非要 catch 一定要抛出 throw new RunTimeException() ,或注解中指定异常类型
@Transactional(rollbackFor=Exception.class),否则会导致事务失效。

  1. 数据库存储引擎不支持事务

你可能感兴趣的:(Spring技术,事务)