上一题下一题

Spring 事务传播行为 REQUIRED 和 REQUIRES_NEW 在已有事务场景下如何表现

进阶版
来源:alibaba初级工程师嵌套事务与保存点数据库连接占用事务回滚边界Spring事务传播行为
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

在已经存在事务的情况下,REQUIRED 和 REQUIRES NEW 的表现差异主要在于:是否复用当前事务。

REQUIRED 是默认传播行为。如果当前方法调用时已经存在事务,它会直接加入这个事务,内外层方法处在同一个事务里。也就是说,内层方法不会单独提交,最终由外层事务统一提交或回滚。

比如:

如果 outer() 已经开启事务,inner() 会加入 outer() 的事务。只要其中任何一个地方抛出运行时异常且没有被正确处理,整个事务都会回滚。

需要注意的是,即使内层异常被外层 catch 住,如果 Spring 已经把当前事务标记成 rollback only,最后外层

登录后查看完整内容