Spring事务传播机制7大类型详解
一、核心概念理解首先要明确事务传播机制Propagation解决的是当一个事务方法被另一个事务方法调用时这个方法的事务该如何与调用方的事务进行交互的问题。简单来说就是定义了 “新事务” 和 “旧事务” 之间的关系规则Spring 把这些规则封装成了Propagation枚举类所有传播行为都基于这个枚举定义。二、Spring 事务传播机制的 7 种类型Spring 提供了 7 种核心的事务传播行为我会按 “常用程度 易理解性” 排序讲解每个类型都包含含义和代码示例1. REQUIRED默认值必要的含义如果当前存在事务就加入这个事务如果当前没有事务就新建一个事务。这是最常用的传播机制。场景绝大多数业务场景如下单扣库存、支付扣余额都用这个保证操作在同一个事务里。代码示例import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; Service public class OrderService { // 调用方方法 Transactional(propagation Propagation.REQUIRED) public void createOrder() { // 1. 保存订单 saveOrder(); // 2. 调用库存服务扣减库存被调用方 stockService.deductStock(); } Service public class StockService { // 被调用方方法 Transactional(propagation Propagation.REQUIRED) public void deductStock() { // 扣减库存逻辑 } } }执行逻辑调用createOrder()时没有现有事务会新建一个事务执行deductStock()时发现已有事务就加入这个事务两个方法的操作要么都成功提交要么都回滚。2. SUPPORTS支持的含义如果当前存在事务就加入这个事务如果当前没有事务就以非事务方式执行。场景查询类方法如查询订单详情有事务时就跟着事务走没有也不强制创建。Transactional(propagation Propagation.SUPPORTS) public OrderVO getOrderDetail(Long orderId) { // 查询订单逻辑无修改操作 return orderMapper.selectById(orderId); }3. MANDATORY强制的含义必须在现有事务中执行如果当前没有事务直接抛出IllegalTransactionStateException异常。场景必须依赖外层事务的核心修改操作如订单状态更新必须在下单 / 支付的事务中执行。Transactional(propagation Propagation.MANDATORY) public void updateOrderStatus(Long orderId, Integer status) { orderMapper.updateStatus(orderId, status); } // 如果直接调用这个方法无外层事务会抛异常只有被其他事务方法调用才会执行。4. REQUIRES_NEW新建的含义无论当前是否有事务都新建一个独立的事务如果原有事务存在会先暂停原有事务新事务执行完后再恢复原有事务。场景日志记录、消息发送等 “不希望被主事务回滚影响” 的操作。Service public class OrderService { Transactional(propagation Propagation.REQUIRED) public void createOrder() { saveOrder(); // 主事务操作 logService.recordLog(); // 调用新建事务的方法 int i 1 / 0; // 制造异常主事务回滚 } } Service public class LogService { Transactional(propagation Propagation.REQUIRES_NEW) public void recordLog() { // 记录订单创建日志 logMapper.insert(new Log(创建订单, LocalDateTime.now())); } }执行逻辑recordLog()会新建独立事务执行完就提交即使createOrder()后续抛异常回滚日志记录也不会回滚因为是独立事务。5. NOT_SUPPORTED不支持的含义以非事务方式执行如果当前有事务会先暂停原有事务执行完后再恢复原有事务。场景耗时较长的非核心操作如导出报表避免占用事务资源导致事务超时。6. NEVER从不含义必须以非事务方式执行如果当前存在事务直接抛出IllegalTransactionStateException异常。场景完全不允许在事务中执行的操作如纯查询且对性能要求极高的统计操作。Transactional(propagation Propagation.NEVER) public Long countAllOrders() { return orderMapper.count(); } // 如果被事务方法调用会抛异常只有直接调用无事务才会执行。7. NESTED嵌套的含义如果当前有事务就在这个事务里创建一个嵌套事务子事务如果没有就新建一个事务。核心特点嵌套事务依赖外层事务外层事务回滚时嵌套事务也会回滚但嵌套事务可以独立回滚不影响外层事务这是和REQUIRED的核心区别底层依赖数据库的保存点Savepoint功能所以需要数据库支持如 MySQL InnoDB。Service public class OrderService { Transactional(propagation Propagation.REQUIRED) public void createOrder() { saveOrder(); // 外层事务操作 try { stockService.deductStock(); // 嵌套事务 } catch (Exception e) { // 嵌套事务回滚外层事务继续执行 log.error(扣减库存失败, e); } // 外层事务最终提交saveOrder() 会生效deductStock() 已回滚 } } Service public class StockService { Transactional(propagation Propagation.NESTED) public void deductStock() { // 扣减库存逻辑若失败则回滚自身不影响外层 int i 1 / 0; // 制造异常 } }三、关键对比易混淆类型类型核心区别REQUIRED与外层事务共用一个事务同生共死REQUIRES_NEW新建独立事务外层事务不影响内层NESTED嵌套事务内层回滚不影响外层外层回滚影响内层总结核心作用事务传播机制定义了 “方法间调用时事务的交互规则”解决多事务方法嵌套调用的事务边界问题。常用类型REQUIRED默认共用事务、REQUIRES_NEW独立事务、SUPPORTS查询用是日常开发中最常使用的三种。关键注意NESTED依赖数据库保存点而REQUIRES_NEW是完全独立的事务二者不要混淆传播机制仅在Spring 管理的事务方法间调用时生效如非 public 方法、内部调用会失效。

相关新闻

DeepSeek V4 Sealion-lite惊爆:百万token超长上下文+原生多模态,华为优先适配国产芯片,英伟达垄断神话被撕开!

DeepSeek V4 Sealion-lite惊爆:百万token超长上下文+原生多模态,华为优先适配国产芯片,英伟达垄断神话被撕开!

DeepSeek V4 Sealion-lite版本意外泄露,具备百万token超长上下文窗口和原生多模态推理能力,性能对标Claude Opus 4.6。核心亮点是华为优先适配国产芯片,标志着中国AI算力摆脱对英伟达的依赖,实现自主可控。DeepSeek V4推出轻量版和…

2026/5/17 8:20:38 阅读更多 →
深度学习框架目标检测算法YOLOV8模型如何训练 楼道楼梯障碍物检测 数据集通道障碍物识别 / 安全巡检楼梯障碍物检测数据集 楼梯杂物数据集 楼道杂物数据集的应用与训练

深度学习框架目标检测算法YOLOV8模型如何训练 楼道楼梯障碍物检测 数据集通道障碍物识别 / 安全巡检楼梯障碍物检测数据集 楼梯杂物数据集 楼道杂物数据集的应用与训练

楼梯间通道障碍物数据集(1226张) 数据格式:YOLO标注(txt) 类别数量:1类(corridor_mess) 适用方向:目标检测 / 通道障碍物识别 / 安全巡检 数据特点:场景真实…

2026/5/17 8:20:38 阅读更多 →
大模型面试通关秘籍!半年内N面阿里腾讯,这份面经助你拿下高薪Offer!

大模型面试通关秘籍!半年内N面阿里腾讯,这份面经助你拿下高薪Offer!

本文分享了作者近半年内面试阿里、腾讯、美团等知名大厂的经历,总结了大模型应用开发面试的核心内容。文章指出,大模型面试题难度适中,重点考察RAG、微调原理及实践、Agent设计等,算法题和八股文占比减少,更注重实践能…

2026/5/17 8:20:38 阅读更多 →

最新新闻

踩坑半年总结:C#部署YOLO最容易忽略的8个工业级细节

踩坑半年总结:C#部署YOLO最容易忽略的8个工业级细节

前言 网上关于C#部署YOLO的教程铺天盖地,但90%都停留在“跑通Demo”的阶段。真正把模型塞进产线、扛住724小时运行、应对各种边缘Case后,你才会发现:能跑和能用之间,隔着一整条护城河。 本文不讲基础环境搭建,只聊我在过去半年工业落地中用血泪换来的8个细节。每一个都是深…

2026/7/6 14:11:07 阅读更多 →
【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG

【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG

note T2SGrid 的最大贡献在于范式创新:它没有直接设计复杂的时间模块,而是巧妙地借用了视觉大模型原生的空间注意力机制,将时间流转化为空间网格。把视频多帧拼成一张网格图(把视频 clip 拼成网格图),让普…

2026/7/6 14:11:07 阅读更多 →
Auto memory,把 Claude Code 从临时搭档变成项目老同事

Auto memory,把 Claude Code 从临时搭档变成项目老同事

最近在研究 Claude Code 的记忆机制时,我一直觉得 Auto memory 这个功能被低估了。很多人把 Claude Code 当成一个会写代码、能跑命令、能改文件的终端助手,但真正把它和普通聊天式编程助手拉开距离的地方,不只是它能操作代码仓库,而是它可以在一次次会话之间沉淀项目经验。…

2026/7/6 14:09:05 阅读更多 →
多设备传动改造:盖茨工业皮带的工程应用经验复盘

多设备传动改造:盖茨工业皮带的工程应用经验复盘

摘要工厂多类型设备同步开展传动系统技改时,普遍存在工况混杂、传动结构差异化大、原有传动故障根源复杂、改造标准不统一等工程难题。大量现场技改数据统计,85% 以上改造后皮带仍短期失效,并非配件本体性能不足,而是前期故障诊断…

2026/7/6 14:09:05 阅读更多 →
CP-ABE代理重加密与混合检测技术构建动态数据安全闭环

CP-ABE代理重加密与混合检测技术构建动态数据安全闭环

1. 项目概述:当数据安全遇上智能防御 最近在梳理一些前沿的数据安全与网络防御方案时,一个组合技术方案引起了我的注意,那就是“密文策略属性基代理重加密”与“应用层攻击混合检测技术”的结合。这听起来像是一串复杂的技术名词堆砌&#xf…

2026/7/6 14:07:03 阅读更多 →
【私房菜集 HarmonyOS ArkTS 实战系列 06】菜谱详情页:大图、用料、步骤与忌口提醒的页面组织

【私房菜集 HarmonyOS ArkTS 实战系列 06】菜谱详情页:大图、用料、步骤与忌口提醒的页面组织

【私房菜集 HarmonyOS ArkTS 实战系列 06】菜谱详情页:大图、用料、步骤与忌口提醒的页面组织 第 05 篇完成了探索与搜索链路:用户可以通过关键词、分类和列表找到目标菜谱。本篇继续进入菜谱详情页,拆解 RecipeDetailPage 如何承接 recipeId…

2026/7/6 14:07:03 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻