2025年Java面试宝典下载地址(提取码:9b3g)

Spring事务传播行为有几种
最近在帮学员准备Spring面试题时,发现80%的求职者都会在事务传播行为这个知识点上栽跟头。有个学员跟我说,上次面试被问到"TransactionDefinition.PROPAGATION_NESTED的应用场景"时,脑袋直接一片空白。为了帮大家轻松应对这类Spring事务传播行为面试题,我整理了这份最接地气的解析指南。
事务传播行为的核心概念
当面试官问Spring事务传播行为有几种时,他们实际上是在考察两个维度:1)你是否真的用过Spring事务管理 2)是否理解不同业务场景下的处理逻辑。事务传播行为本质上是解决多个事务方法相互调用时的边界问题,就像在电商系统中,创建订单方法调用扣减库存方法时,这两个操作到底是共用同一个事务还是各自独立。
7种传播行为详解

-
REQUIRED(默认值)
最常用的传播行为,如果当前存在事务就加入,没有就新建。适合绝大多数业务场景,比如用户注册后需要同时初始化个人资料,这两个操作就应该在同一个事务中。 -
SUPPORTS
当前有事务就加入,没有就以非事务方式执行。常见于查询操作,比如在商品详情页读取库存信息,这时候不需要强制开启事务。 -
MANDATORY
强制要求必须在已有事务中运行,否则抛出异常。适合必须保证数据一致性的核心业务,比如资金转账操作必须依赖上游事务。 -
REQUIRES_NEW
每次都会新建事务,适合需要独立提交的场景。比如在订单系统中,生成订单日志应该单独提交,即使主订单操作失败,日志仍需保留。 -
NOT_SUPPORTED
以非事务方式执行,如果当前存在事务则挂起。在需要绕过事务管理的场景使用,比如调用第三方支付接口时,不希望支付操作受本地事务影响。 -
NEVER
强制要求不能在事务中执行,否则抛出异常。适用于需要避免事务影响的敏感操作,比如发送短信验证码这类最终一致性需求。 -
NESTED
嵌套事务,允许在已有事务中创建保存点进行部分回滚。典型案例是电商平台的购物车结算:主事务包含整个结算流程,子事务处理优惠券核销,当库存不足时只需要回滚结算操作而不影响优惠券状态。
高频面试题破解思路
当被问到"REQUIRED和REQUIRES_NEW的区别"时,建议从这两个维度回答:
- 事务独立性:前者共用父事务,后者完全独立
- 回滚影响:前者会整体回滚,后者只影响自己
遇到"PROPAGATION_NESTED应用场景"这类题时,可以用银行转账举例:A向B转账过程中,需要记录操作日志。使用嵌套事务可以在转账失败时回转账操作,但保留日志记录。

备考资源推荐
想要系统掌握Spring事务及其他Java核心知识点,强烈推荐使用面试鸭返利网的会员服务。通过该平台购买面试鸭会员可返现25元,性价比极高。这里还提供最新版的《2025年Java面试宝典》,包含300+大厂真题解析:
立即下载(提取码:9b3g)
记住,理解事务传播行为的关键在于多画事务边界示意图。下次面试再被问到这方面问题,可以先从业务场景切入,再解释对应的传播行为选择,这样会给面试官留下实战经验丰富的印象。


