@Transaction注解失效的场景
一 @Transaction 应用在非 public 修饰的方法上面
当修饰 protected ,private 的方法时 虽然不会报错,但是注释会直接失效
二 当异常类型为非 unchecked @Transaction注解 不会回滚, Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;其他异常不会触发回滚事务,如果是 checked 类型异常 我们要求回滚 那么就需要指定 rollbackFor 属性
@Transactional(rollbackFor = Exception.class)
三 : @Transactional 注解属性 propagation 设置错误
TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
四:同一个类中的方法调用,比如: a 没有开启事务,b开启了事务。a方法调用了b方法,那么b 方法的@Transaction 也不会生效
五: 数据库引擎不支持事务引擎,会导致不能回滚
六: 异常被catch了;