spring传播机制事务相关

一、REQUIRED 核心规则(一句话记住)

有则加入,无则新建

完整严谨描述:
 
  1. 当一个被 @Transactional 标记的目标方法执行时,先检查当前执行环境是否已经存在事务;
  2. 如果当前已有事务 → 该方法不会新建事务,而是加入到这个已存在的事务中,成为「同一个事务」的一部分;
  3. 如果当前没有事务 → 该方法就自己新建一个全新的独立事务来执行。

二、准备基础测试代码(通用)

为了让示例直观,我们定义一个业务 Service,包含 2 个带事务的「子方法」,模拟数据库的增删改操作(事务只对增删改生效,查询无意义),所有方法抛出的是RuntimeException(Spring 事务默认只对运行时异常回滚,贴合实际开发)。

1. 核心业务 Service

java
 
运行
 
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class OrderService {// 事务方法1:模拟【创建订单】操作,带默认事务(REQUIRED)@Transactional // 等价于 @Transactional(propagation = Propagation.REQUIRED)public void createOrder() {System.out.println("执行逻辑:向数据库插入【订单】数据");// 这里可以写真实的 mapper.insert(订单对象)}// 事务方法2:模拟【扣减库存】操作,带默认事务(REQUIRED)@Transactionalpublic void deductStock() {System.out.println("执行逻辑:修改数据库的【商品库存】数据");// 这里可以写真实的 mapper.update(库存对象)// 手动抛出运行时异常,模拟业务执行失败throw new RuntimeException("扣减库存失败!库存不足");}
}

2. 补充说明

 
  • 两个方法都加了@Transactional,都是默认的REQUIRED传播机制;
  • deductStock() 方法中手动抛出异常,用于模拟「业务执行失败」的场景,验证事务的回滚规则;
  • 真实开发中,这里就是调用 Mapper/DAO 层操作数据库,效果完全一致。

 

三、场景一:外层方法【无事务】,调用内层事务方法 ✅ 无则新建

 
这是 REQUIRED 规则的第一种情况:当前执行环境无事务 → 内层方法各自新建独立事务。
 

1. 新增「无事务的外层方法」

 
在上面的OrderService中新增一个不加任何事务注解的方法,用来调用两个事务子方法:
 
java
 
运行
 
// 无事务的外层方法:没有@Transactional注解
public void doBizWithoutTx() {// 调用第一个事务方法this.createOrder();// 调用第二个事务方法(会抛异常)this.deductStock();
}

2. 执行结果 + 事务分析

调用 doBizWithoutTx() 方法后,最终执行结果:
✅ 数据库中,订单数据插入成功,库存数据无修改(扣减库存回滚)
核心分析(重中之重):
  1. 外层方法doBizWithoutTx() 无事务,执行时「当前无事务环境」;
  2. 调用createOrder()时 → 无事务,触发REQUIRED → 新建独立事务 A,执行完订单插入后,事务 A 正常提交;
  3. 调用deductStock()时 → 无事务,触发REQUIRED → 新建独立事务 B,执行库存扣减后抛出异常,事务 B 触发回滚;
  4. 结论:两个事务方法各自是独立的事务,互不影响!一个成功提交,一个失败回滚。

四、场景二:外层方法【有事务】,调用内层事务方法 ✅ 有则加入(重点 + 高频)

这是 REQUIRED 规则的第二种情况,也是实际开发中最常用的场景:当前执行环境有事务 → 内层方法加入外层事务,成为同一个事务。

1. 新增「有事务的外层方法」

OrderService中新增一个加了 @Transactional的外层方法,同样调用两个事务子方法:
java
运行
// 有事务的外层方法:自己带默认事务(REQUIRED)
@Transactional
public void doBizWithTx() {// 调用第一个事务方法this.createOrder();// 调用第二个事务方法(会抛异常)this.deductStock();
}

2. 执行结果 + 事务分析

调用 doBizWithTx() 方法后,最终执行结果:
 
✅ 数据库中,订单数据无插入、库存数据无修改,两个操作全部回滚!
 
核心分析(必须吃透):
 
  1. 外层方法doBizWithTx() 加了@Transactional,执行时先新建了一个「主事务 T」;
  2. 调用createOrder()时 → 当前已有事务 T,触发REQUIRED → 不新建事务,直接加入主事务 T,订单插入逻辑成为事务 T 的一部分;
  3. 调用deductStock()时 → 当前已有事务 T,触发REQUIRED → 不新建事务,直接加入主事务 T,库存扣减逻辑也成为事务 T 的一部分;
  4. deductStock()抛出异常 → 整个「主事务 T」触发回滚,事务内的所有操作都会回滚(包括之前执行的 createOrder 的订单插入);
  5. 结论:外层有事务时,所有内层的 REQUIRED 事务方法,都会合并成一个事务,要么全部成功,要么全部失败回滚!

五、补充 2 个关键知识点(面试 / 开发高频)

✅ 知识点 1:同一个事务的核心特性

当多个方法「加入到同一个事务」时,它们共享同一个事务的所有属性:
  • 事务的隔离级别、超时时间、只读属性等,都和外层主事务一致;
  • 事务的提交 / 回滚是全局的:只有所有方法都执行成功,事务才会最终提交;只要有任意一个方法抛出异常触发回滚,整个事务全部回滚。

✅ 知识点 2:REQUIRED 是 Spring 的默认选择,为什么?

Spring 把REQUIRED作为默认传播机制,是因为它完美贴合 99% 的业务场景:
实际开发中,我们的业务逻辑都是「组合操作」(比如:下单 = 创建订单 + 扣减库存 + 扣减余额),这些操作必须是原子性的(要么都成,要么都败),否则会出现「数据不一致」的脏数据(比如:订单创建成功,但库存没扣减,商品超卖)。
REQUIRED的机制刚好满足这个需求,这也是它成为默认值的核心原因。

总结(核心要点,一句话总结所有)

  1. Spring 事务默认传播机制:Propagation.REQUIRED,口诀「有则加入,无则新建」;
  2. 外层无事务 → 内层事务方法各自独立,一个失败不影响另一个;
  3. 外层有事务 → 内层事务方法全部合并为同一个事务,一荣俱荣,一损俱损;
  4. 这是 Spring 最核心、最常用的事务传播机制,99% 的业务开发都用它足够。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1177956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别墅装修怎么选入户门?2025-2026别墅入户门选购终极指南:十大品牌权威排名揭晓 - 匠子网络

body { font-family: "Microsoft YaHei", sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-width: 1200px; margin: 0 auto; padding: 20px } h1 { text-align: center; color: rgba(139, 6…

7.1 NL2SQL核心技术:让AI听懂你的自然语言查询

7.1 NL2SQL核心技术:让AI听懂你的自然语言查询 在人工智能时代,让计算机理解人类的自然语言并执行相应的操作一直是我们的终极目标之一。其中,将自然语言转换为SQL查询(NL2SQL)是一项非常重要的任务,它能够使非技术人员通过简单的自然语言指令来查询数据库,而无需掌握复…

有人吃NMN像换了个人,有人却没啥变化!盼生派带你搞懂NMN真相 - 速递信息

42岁的李女士没有任凭岁月摆布,没有断崖衰老,没有被人猜错年龄,她心里都很得意。这得益她改变了思路,才彻底告别了“抗衰焦虑”。曾经靠浓妆遮盖的法令纹变浅了,熬夜后第二天也不会昏沉乏力,就连体检报告上的各项…

AI 写论文哪个软件最好?实测虎贲等考 AI:毕业论文的智能通关密码

毕业季的论文战场,“AI 写论文哪个软件最好” 的灵魂拷问,总能在各大高校的互助群里刷屏。不少同学踩坑无数:有的工具生成内容空洞无物,有的文献引用漏洞百出,有的查重结果与学校标准脱节。作为深耕论文写作科普的测评…

云数潮:每天三分钟,让普通人参与数字经济 - 速递信息

在数字经济成为时代发展重要方向的当下,真正的关键不在于技术本身,而在于——普通人是否真正拥有可执行的参与入口。 如果只有概念而缺乏可行路径,数字经济终究难以实现普惠。 云数潮(YunData Wave),正是在这一背…

虎贲等考 AI:重塑学术写作范式的智能全流程解决方案

在学术研究数字化转型的浪潮下,论文写作不再是孤军奋战的苦旅。虎贲等考 AI 智能写作平台—— 一款深度融合人工智能技术的专业论文写作辅助工具,以 “真实赋能、智能高效、合规严谨” 为核心定位,构建起从开题构思到答辩定稿的全链条学术服务…

毕业生必看:论文AI率太高被退回?5招搞定降AI全攻略 - 还在做实验的师兄

论文AI率太高被导师打回来?别慌。这篇攻略教你5招搞定:先搞清楚检测原理,再用手动+工具组合拳处理。核心推荐嘎嘎降AI(达标率99.26%)和比话降AI(知网专攻),能把AI率从70%+降到10%以下。毕业生必看:论文AI率太…

bind接口的address详解

QUdpSocket::bind() 接口中的 address 参数(类型为 QHostAddress)用于指定 本地 哪个网络接口(IP 地址)来监听 UDP 数据报。这个参数对 socket 的行为有决定性影响,下面从原理、常用值、使用场景和注意事项四个方面详细…

Kimi写的内容AI率太高?这几款工具帮你降到10%以下 - 还在做实验的师兄

Kimi支持超长文本输入,写文献综述很方便,但生成内容AI率普遍在70%-85%。Kimi自己改只能降到30%-40%,而且容易改偏原意。要想降到10%以下,必须用专业降AI工具:嘎嘎降AI(性价比高)、比话降AI(效果稳定)最靠谱。…

端口的本质是什么

端口(Port)的本质是操作系统用于区分同一台主机上不同网络通信进程或服务的逻辑标识符。它不是物理设备,而是一个 16 位的整数(0~65535),与 IP 地址结合使用,构成“套接字地址(Socke…

聊聊2026年果汁生产线资深厂商,上望机械制造靠谱吗? - 工业品牌热点

2026年饮料行业消费升级加速,健康化、个性化需求驱动果汁市场规模持续扩容,高效果汁生产线已成为企业提升产能效率、保障产品品质、抢占市场份额的核心载体。无论是中小微饮料厂的初创建厂需求,还是成熟品牌的产能升…

Kimi降AI效果怎么样?月之暗面AI助手降论文AI率实测 - 还在做实验的师兄

Kimi作为月之暗面出品的AI助手,长文本处理能力强,但用它降AI效果有限。实测反复改写3轮,AI率从82%只能降到65%左右。想真正把AI率降到学校要求的20%以下,还是需要专业工具:嘎嘎降AI(4.8元,达标率99.26%)或比话…

告别绘图加班!虎贲等考 AI 科研绘图:让数据秒变期刊级高颜值图表

还在为科研绘图熬秃脑袋?用 Origin 调试参数两小时,图表排版依旧混乱;用 Excel 画不出复杂热图,数据可视化效果大打折扣;好不容易用 Visio 画出实验装置图,却因不符合期刊规范被打回重改…… 在科研圈&…

数值方法验证: 制造解方法(Method of Manufactured Solutions,MMS)介绍

文章目录一、基本思想二、实施步骤(以一个通用 PDE 为例)三、优点四、注意事项五、经典文献推荐六、实践建议Method of Manufactured Solutions(MMS,制造解方法) 是一种广泛用于验证偏微分方程(PDE&#xf…

10 分钟搞定学术 PPT!虎贲等考 AI PPT:逻辑与颜值双在线的汇报神器

还在为开题答辩 PPT 熬到凌晨三点?辛辛苦苦写的论文,做成 PPT 却逻辑混乱、排版拉垮,被导师批 “抓不住重点”?作为深耕论文写作科普的博主,我发现 90% 的学术人做 PPT,都困在 “内容提炼难、格式调整烦、风…

8.3 DICOM数据处理:医疗影像预处理全流程

8.3 DICOM数据处理:医疗影像预处理全流程 在医疗影像AI应用中,DICOM(Digital Imaging and Communications in Medicine)是最常用的医学影像存储和传输标准。掌握DICOM数据的处理技术对于构建医疗AI系统至关重要。本章将详细介绍DICOM数据格式、处理方法以及完整的预处理流…

8.4 智能诊断报告:从影像到文本的跨模态生成

8.4 智能诊断报告:从影像到文本的跨模态生成 在前面的章节中,我们学习了医学影像的处理、病灶检测与分割等关键技术。本章将探讨如何利用这些技术成果,结合自然语言处理技术,自动生成智能诊断报告。这是医学人工智能领域的一个重要应用方向,能够显著提高医生的工作效率,…

全自动制袋机制造企业选择哪家好?靠谱的厂家排名情况如何? - 工业品牌热点

随着包装行业对自动化生产需求的持续攀升,全自动制袋机已成为食品、日化、电商等领域企业提升生产效率的核心设备。但面对市场上琳琅满目的全自动制袋机制造厂,企业往往陷入选品牌还是选性价比看参数还是看售后的纠结…

查重 AIGC 双杀!虎贲等考 AI 让论文改写告别 “机器味” 与高重复率

还在为论文查重率居高不下熬夜改稿?还在因 AI 生成痕迹明显被导师打回?在学术检测愈发严格的当下,重复率超标、AIGC 特征显著,成了无数科研人和毕业生的 “致命痛点”。市面上的降重工具要么是简单同义词替换,改得语句…

课程论文不用愁!虎贲等考 AI 一键解锁高分学术捷径

还在为课程论文选题跑偏抓耳挠腮?还在因文献堆砌逻辑混乱被导师打回?还在熬夜改格式、降重复率,结果却事倍功半?作为深耕学术写作科普的博主,后台每天都被大学生的课程论文焦虑刷屏。别慌!虎贲等考 AI 智能…