You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring服务间事务传播疑问:REQUIRED属性下事务数量问题

事务传播属性REQUIRED的实际调用逻辑解答

嘿,这个问题问到点子上了!咱们直接给结论:只会创建1个事务——由服务1的方法A开启,服务2的方法B会直接共用这个事务。

为啥是这样?得从REQUIRED这个传播属性的核心规则说起:

  • REQUIRED是Spring事务的默认配置,它的逻辑非常直白:如果当前上下文已经存在活跃事务,就直接加入这个事务;如果没有,就新建一个事务。
  • 当客户端调用服务1的方法A时,此时没有任何活跃事务,Spring会为方法A创建一个全新的事务。
  • 紧接着方法A调用服务2的方法B时,因为当前已经有一个由方法A开启的活跃事务在运行,方法B的REQUIRED属性会触发“加入已有事务”的逻辑,不会再新建事务。

顺便给你提个项目中复合操作的注意点:

  • 这种情况下,方法A和方法B的所有数据库操作都在同一个事务边界内,遵循“要么全成,要么全败”的原则。比如如果方法B执行失败抛出了未被捕获的异常,整个事务(包括方法A已经完成的操作)都会被回滚。
  • 如果你的业务场景需要方法B在独立事务中执行(比如方法B失败不影响方法A的提交),那可以把方法B的事务传播属性改成REQUIRES_NEW——这个属性会强制新建一个独立事务,和方法A的事务完全隔离,彼此的提交/回滚互不影响。

内容的提问来源于stack exchange,提问作者whysoseriousson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:50:56