事务失效场景(3)

1. rollbackFor配置错误

@Transactional默认仅对RuntimeException和Error触发回滚。

问题

  • 若指定rollbackFor = ResultException.class
  • 当抛出ParamException等其他异常时,事务不会回滚

解决方案

  • 使用rollbackFor = Exception.class或所有异常类型

2. 事务注解被覆盖

子类重写父类带@Transactional的方法时,若未显式声明事务注解,Spring AOP代理可能绕过事务增强。

解决方案

  • 接口定义方法并实现是更可靠的方式

3. 嵌套事务问题

默认传播行为为REQUIRED,子方法加入父事务:

  • 子方法异常会导致整个事务回滚
  • 即使父方法后续逻辑本应成功

解决方案

  • 使用REQUIRES_NEW
  • 或捕获内部异常