事务失效场景(3)
1. rollbackFor配置错误
@Transactional默认仅对RuntimeException和Error触发回滚。
问题:
- 若指定
rollbackFor = ResultException.class - 当抛出
ParamException等其他异常时,事务不会回滚
解决方案:
- 使用
rollbackFor = Exception.class或所有异常类型
2. 事务注解被覆盖
子类重写父类带@Transactional的方法时,若未显式声明事务注解,Spring AOP代理可能绕过事务增强。
解决方案:
- 接口定义方法并实现是更可靠的方式
3. 嵌套事务问题
默认传播行为为REQUIRED,子方法加入父事务:
- 子方法异常会导致整个事务回滚
- 即使父方法后续逻辑本应成功
解决方案:
- 使用
REQUIRES_NEW - 或捕获内部异常