springboot的事务传播机制

Spring 定义了 7 种事务传播行为(枚举Propagation),核心解决 “方法 A 调用方法 B 时,B 的事务如何和 A 的事务交互” 的问题
1. 核心场景:嵌套方法调用

@Service
public class ServiceA {
    @Transactional // A有事务
    public void methodA() {
        serviceB.methodB(); // 调用B的方法
    }
}

@Service
public class ServiceB {
    @Transactional(propagation = Propagation.XXX) // 传播行为决定B的事务规则
    public void methodB() {
        // 业务操作
    }
}

2. 7 种传播行为(按常用程度排序)

传播行为 名称 核心规则 适用场景
必需(默认) REQUIRED 如果当前有事务,就加入;没有就新建 绝大多数业务场景(如订单创建 + 扣库存)
新建 REQUIRES_NEW 无论当前是否有事务,都新建独立事务;原事务挂起,新事务执行完后恢复原事务 日志记录、消息发送(即使主事务回滚,日志仍需提交)
嵌套 NESTED 如果当前有事务,就嵌套在其中(子事务);没有就新建;子事务回滚不影响主事务,主事务回滚子事务必回滚 分步骤提交(如批量插入,某一步失败仅回滚该步)
支持 SUPPORTS 如果当前有事务,就加入;没有就以非事务方式执行 查询类方法(可选事务)
不支持 NOT_SUPPORTED 以非事务方式执行;如果当前有事务,就挂起 耗时的非核心操作(如导出报表)
强制 MANDATORY 必须在已有事务中执行,否则抛异常 核心业务方法(必须依赖外层事务)
禁止 NEVER 必须以非事务方式执行,否则抛异常 绝对不允许有事务的方法(如纯内存操作)

3. 传播机制的执行逻辑(可视化)
image

posted @ 2026-01-11 17:38  daring_ding  阅读(2)  评论(0)    收藏  举报