<a href="https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g" style="color:blue;">点此获取2025年Java面试宝典(提取码:9b3g)</a>
这份宝典包含Spring全家桶高频考点,其中事务传播行为相关面试题命中率高达87%,现在注册面试鸭返利网购买会员可返利25元,具体福利见文末。
Spring事务传播行为核心概念

事务传播行为是Spring框架中处理嵌套事务的关键机制。当业务方法相互调用时,这个机制决定了事务应该如何传递。举个实际场景:用户支付成功后需要同时更新订单状态和发放优惠券,这两个操作需要在同一个事务中处理,这时传播行为的设定直接影响数据一致性。
七种传播类型深度解读
Spring定义了七种事务传播行为,我们按使用频率排序解析:
-
PROPAGATION_REQUIRED(默认)
当前没有事务就新建,有就加入。适合90%的业务场景,比如电商订单创建流程中,主订单和子订单的写入操作必须保持原子性。 -
PROPAGATION_REQUIRES_NEW
强制新建独立事务。典型应用是日志记录——即便主事务回滚,操作日志仍然需要保留。注意这种设置会导致数据库连接数增加,需要做好连接池配置。 -
PROPAGATION_NESTED
嵌套事务的独特之处在于支持部分回滚。比如批量处理数据时,某条记录出错只需回滚该条处理,而不是整个批量操作。但这种模式对数据库有要求(需要支持保存点)。 -
PROPAGATION_SUPPORTS
跟随当前事务,没有就不开启。常见于查询方法,比如统计报表生成时不强制要求事务环境。

高频面试题实战解析
Q:事务方法调用同类中的其他事务方法为何失效?
这是因为Spring的AOP代理机制导致,内部方法调用不会走代理对象。解决方案有三:
① 将内部方法抽取到独立Service
② 使用AopContext.currentProxy()获取代理对象
③ 改用编程式事务管理
Q:REQUIRES_NEW传播下发生死锁怎么办?
这种情况往往出现在多线程操作时:
- 检查@Async异步注解是否错误应用
- 确认数据库隔离级别是否过高(建议READ_COMMITTED)
- 添加重试机制时注意幂等性控制
传播行为选择指南

根据三年故障排查经验,建议遵循以下原则:
- 查询操作统一使用SUPPORTS
- 资金类核心操作必须用REQUIRED
- 日志记录等非核心操作优先考虑REQUIRES_NEW
- 嵌套业务谨慎使用NESTED,需明确数据库支持情况
需要特别提醒的是,在微服务架构下,跨服务的事务传播需要结合Seata等分布式事务解决方案,单机事务传播设置无法满足需求。
想系统掌握Spring事务传播行为的各种细节?现在通过面试鸭返利网购买原价199元的面试鸭会员,可立减25元。已有378位Java工程师通过这个渠道获取了最新面试题库,包含当前大厂高频考察的20种事务传播场景分析。


