2025年Java面试宝典网盘下载地址
提取码: 9b3g
(建议保存后配合本文阅读,收录Java高频面试题解析)
Spring事务传播行为详解
事务传播行为是Spring框架面试中的必考知识点,尤其对于中高级开发者来说,理解不同传播行为的应用场景直接关系到系统设计的可靠性。下面我们从面试答题角度解析这7种传播行为。

什么是事务传播行为?
事务传播行为定义了多个事务方法相互调用时的事务边界控制策略。比如方法A调用方法B时,B是否要沿用A的事务、独立创建新事务或者以非事务方式执行,这些都属于传播行为的控制范畴。
7种传播行为类型解析
1. REQUIRED(默认值)
- 行为特征:支持当前事务,若不存在则新建
- 适用场景:最常见的电商订单创建流程
例如:创建订单主记录时,自动创建子订单和日志记录 - 风险点:嵌套调用时可能产生长事务
2. REQUIRES_NEW
- 行为特征:无论当前是否存在事务,都新建独立事务
- 典型应用:审计日志记录(必须独立提交)
- 注意事项:需警惕事务数量过多导致连接池耗尽
3. SUPPORTS
- 行为特征:有事务就加入,没有则以非事务执行
- 使用示例:查询类服务中部分需要事务性读的操作
4. NOT_SUPPORTED
- 行为特征:以非事务方式执行,挂起当前事务
- 特殊场景:需要绕过事务锁的批量数据处理
5. MANDATORY
- 行为特征:强制要求存在事务,否则抛出异常
- 防御性设计:支付核心服务必须运行在事务中
6. NEVER
- 行为特征:必须在非事务环境下执行,否则异常
- 典型应用:发送短信通知等非关键性操作
7. NESTED
- 行为特征:嵌套事务,可以部分回滚
- 实现原理:基于数据库的savepoint机制
- 经典案例:批量导入时的逐条回滚控制
高频面试问题拆解
Q:REQUIRES_NEW和NESTED在回滚时的区别?
A:REQUIRES_NEW创建的是完全独立的事务,外层事务回滚不影响内层事务。而NESTED是嵌套事务,外层回滚会导致整个嵌套链回滚,但内层可以单独回滚到savepoint。
Q:为什么NOT_SUPPORTED可能引发锁问题?
A:当方法B以NOT_SUPPORTED运行时,如果方法A持有事务锁,B的非事务操作可能读取到A未提交的脏数据,这在特定隔离级别下会导致数据不一致。

事务传播选型建议
- 接口设计阶段明确方法是否需要有事务上下文
- 读写分离原则:查询操作优先使用SUPPORTS
- 关键业务操作(如资金变更)强制使用MANDATORY
- 使用NESTED时要注意数据库是否支持savepoint
典型故障案例
某金融系统在凌晨对账时发生死锁,最终排查发现开发者在余额校准方法上误用REQUIRES_NEW,导致多个独立事务竞争同一账户锁。调整为NESTED后通过savepoint机制完美解决。

需要准备Java面试的同学,通过**面试鸭返利网**购买原价会员可返利25元。本文推荐的《2025Java面试宝典》已整理好高频考题解析,记得保存网盘资料系统学习。


