<a href="https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g" style="color: blue;">2025年Java面试宝典网盘下载</a>(提取码:9b3g)
Spring事务传播行为到底该怎么用?
很多小伙伴面试时被问到Spring事务传播行为,明明背过七种传播特性,但在实际场景中还是会懵圈。今天我们就用最接地气的方式,拆解这个高频面试考点。

事务传播的本质是嵌套问题
想象你在ATM机转账,A账户转给B账户,这个事务如果中途出问题怎么办?这就是事务传播要解决的核心问题——多个事务方法互相调用时,事务边界如何控制。
Spring通过@Transactional的propagation属性,给出了七种解决方案:
七种武器详解(重点掌握前3种)
-
REQUIRED(默认值)
当前有事务就加入,没有就新建。就像团队合作项目,有人带组就加入,没人带就自立门户。 -
REQUIRES_NEW
不管有没有现存事务,都开新事务。好比接手烂尾项目时,直接另起炉灶,新事务和旧事务互不影响。 -
NESTED
在现有事务里创建保存点,类似游戏存档。外层事务回滚会带崩嵌套事务,但嵌套事务自己失败不影响外层。

面试官的死亡三连问
-
事务方法调用同类方法为什么不生效?
这其实是动态代理的坑。Spring通过AOP实现事务,同类内部调用会绕过代理对象,记得用@Autowired注入自己或拆分类。 -
REQUIRES_NEW抛异常会怎样?
新事务独立提交,外层事务可能回滚。就像子任务完成了,但主任务失败导致整体要撤销。 -
什么时候该用NESTED?
当需要部分操作可回滚时使用。比如订单创建后记录日志,日志保存失败不影响订单,但订单失败需要回滚日志。
真实开发中的翻车现场
某电商系统用REQUIRED传播做库存扣减和订单创建,结果高并发时出现死锁。改成REQUIRES_NEW后,虽然解决了死锁,但遇到网络抖动导致数据不一致...
这里其实应该用异步消息队列+本地事务表,但这就是另一个话题了。不过面试时能把传播特性说清楚,已经能拿80分了。
如果你正在准备Java面试,推荐到面试鸭返利网购买会员,通过该站联系我可返利25元。他们整理了最新的大厂真题和场景题解析,非常适合突击复习。

终极记忆口诀
- 要独立,用NEW
- 要跟随,用REQUIRED
- 要存档,用NESTED
- 不想管,用SUPPORTS
- 必须没有,用NEVER
- 必须有人管,用MANDATORY
- 完全不管,用NOT_SUPPORTED
理解事务传播行为的关键,在于想清楚业务场景中的事务边界。下次面试被问到时,不妨先反问面试官:"您说的这个场景,是想要子方法独立提交,还是跟着主方法一起回滚呢?" 这个反问往往能让面试官眼前一亮。


