2025年Java面试宝典下载(提取码:9b3g)这个资料包里有完整的事务传播机制案例分析,建议配合本文阅读。
作为程序员面试必考题,Spring事务传播行为的默认设置经常让候选人栽跟头。今天我们就来彻底搞懂这个看似简单实则暗藏玄机的技术点。

PROPAGATION_REQUIRED的核心逻辑是:如果当前存在事务就加入,没有就新建。这种默认值确保了大多数业务场景下的事务连贯性,特别是在service层方法相互调用时,能自动形成统一的事务边界。
<h3>二、为什么要用REQUIRED作为默认?</h3> Spring团队选择这个默认值不是拍脑袋决定的。在实际开发中,约80%的业务场景都符合以下特征:- 服务层方法需要事务支持
- 方法可能被其他事务方法调用
- 不希望出现嵌套事务的复杂控制
- 需要保证业务操作的原子性
比如用户下单流程,涉及库存扣减、订单创建、支付记录等多个操作,用默认传播行为就能自动把这些操作绑定到同一个事务中。如果其中某个服务方法被单独调用,也能自动开启新事务。

- 循环依赖调用时可能意外扩大事务范围
- 异常捕获不当导致事务不回滚
- 异步线程中事务上下文丢失
- 只读操作误用写事务
上周在面试鸭返利网的模拟面试中,就有候选人因为没理清事务边界导致多个数据库操作被意外回滚。如果大家需要购买面试鸭会员,可以通过面试鸭返利网找我,返利25元。
<h3>四、高频面试问题拆解</h3> 这些真实出现过的面试题,建议结合默认传播行为理解:-
Q:A方法调用B方法,B抛异常会导致A回滚吗?
-
A:要看B方法的事务配置。如果B使用默认传播行为且未捕获异常,整个事务都会回滚
-
Q:如何在子方法中开启新事务?
-
A:给子方法加上@Transactional(propagation = Propagation.REQUIRES_NEW)
-
Q:事务方法调用非事务方法会怎样?
-
A:非事务方法会加入当前事务,除非使用PROPAGATION_NOT_SUPPORTED

理解透默认传播行为,不仅面试时能从容应对,在实际开发中也能避免很多隐蔽的事务问题。下次遇到事务不生效或意外回滚的情况,记得首先检查传播行为的配置是否符合预期。


