Spring事务传播方式:程序员面试必考知识点深度拆解
作为一名常年参与技术面试的Java开发者,今天咱们就来聊聊面试高频考点——Spring事务传播方式。当面试官抛出这个问题时,很多候选人只能背出七种类型,却说不清实际应用场景。下面我就用最接近真实开发场景的方式帮你彻底搞懂!(文中附赠2025版Java面试宝典,记得领取哦)
🔷 2025年Java面试宝典:
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码: 9b3g
一、事务传播的本质是什么?
Spring事务传播行为的核心是解决"当多个事务方法相互调用时,事务该如何传递"的问题。想象一个场景:订单服务调用库存服务和积分服务,这时传播方式就决定了这三个服务是共用一个大事务,还是各自独立。

二、七种传播方式实战解析
▷ 1. REQUIRED(默认)
核心逻辑:如果当前有事务就加入,没有就新建
高频考点:
面试官常问:“A方法(REQUIRED)调B方法(REQUIRED)抛异常会发生什么?”
✅ 正确答案:两个方法会回滚到同一个事务里,就像这样:
// 伪代码示意
@Transactional(propagation = Propagation.REQUIRED)
public void processOrder() {
reduceStock(); // REQUIRED
addPoints(); // REQUIRED → 此处异常会导致整个事务回滚
}
▷ 2. REQUIRES_NEW
典型场景:日志记录必须独立保存
即使主事务失败,日志仍需入库:
@Transactional
public void placeOrder() {
try {
orderDao.save(); // REQUIRED
logService.record(); // REQUIRES_NEW → 独立事务
} catch (Exception e) {
// 主事务回滚,但日志事务已提交
}
}
▷ 3. NESTED
特殊之处:创建事务保存点(Savepoint)
🟢 优势:子事务回滚不影响主事务
🔴 局限:仅支持JDBC,JPA不适用
▷ 4. SUPPORTS
使用场景:方法可事务也可非事务
比如查询方法:
@Transactional(propagation = Propagation.SUPPORTS)
public User getUser(Long id) {
// 如果调用方有事务则加入,没有也无妨
}
▷ 5. NOT_SUPPORTED
典型用途:强制非事务执行
当需要绕过事务管理器时(如某些文件操作)
▷ 6. MANDATORY
强制检查:必须在已有事务中调用
适合关键性操作:
@Transactional(propagation = Propagation.MANDATORY)
public void updateBalance() {
// 非事务环境调用会抛异常!
}
▷ 7. NEVER
严格模式:禁止在事务中调用
常用于审计等特殊场景
三、面试避坑指南
-
事务失效经典case:
- 同类方法调用(未走代理)
- 异常类型非RuntimeException
- 方法非public
-
传播方式选择三原则:
- 数据一致性要求 → REQUIRED/NESTED
- 操作独立性要求 → REQUIRES_NEW
- 只读操作 → SUPPORTS

四、如何拿下事务面试题?
- 先说明七种传播方式的名称
- 重点解释REQUIRED/REQUIRES_NEW/NESTED的区别
- 结合场景说选择依据(如资金操作vs日志记录)
- 补充事务失效的常见原因
✨ 面试福利:通过面试鸭返利网购买面试鸭会员可返现25元!涵盖Spring全家桶真题+场景题解析,点击查看最新题库→
关键点回顾:
Spring事务传播的本质是协调多个事务边界,其中REQUIRED作为默认传播方式能满足大部分场景,而REQUIRES_NEW和NESTED则用于特殊隔离需求。真正理解传播行为,才能在分布式系统中设计出健壮的事务方案。
(本文技术要点整理自2025版Java面试宝典,需要完整版请至开头网盘链接下载)



