-
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于,
-
PROPAGATION_REQUIRES_NEW 完全是一个新的事务, 而 PROPAGATION_NESTED
-
则是外部事务的子事务, 如果外部事务 commit, 潜套事务也会被 commit,
-
这个规则同样适用于 roll back
-
现在的情况就变得比较复杂了, ServiceB.methodB() 的事务属性被配置为 PROPAGATION_NESTED, 此时两者之间又将如何协作呢? ServiceB#methodB 如果 rollback, 那么内部事务(即 ServiceB#methodB) 将回滚到它执行前的 SavePoint 而外部事务(即 ServiceA#methodA) 可以有以下两种处理方式: a、捕获异常,执行异常分支逻辑 void methodA() { try { ServiceB.methodB(); } catch (SomeException) { // 执行其他业务, 如 ServiceC.methodC(); } } 这种方式也是嵌套事务最有价值的地方, 它起到了分支执行的效果, 如果 ServiceB.methodB 失败, 那么执行 ServiceC.methodC(), 而 ServiceB.methodB 已经回滚到它执行之前的 SavePoint, 所以不会产生脏数据(相当于此方法从未执行过), 这种特性可以用在某些特殊的业务中, 而 PROPAGATION_REQUIRED 和 PROPAGATION_REQUIRES_NEW 都没有办法做到这一点。 b、 外部事务回滚/提交 代码不做任何修改, 那么如果内部事务(ServiceB#methodB) rollback, 那么首先 ServiceB.methodB 回滚到它执行之前的 SavePoint(在任何情况下都会如此), 外部事务(即 ServiceA#methodA) 将根据具体的配置决定自己是 commit 还是 rollback1、如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB也将回滚。
2、如果ServiceB.methodB失败回滚,如果他抛出的异常被ServiceA.methodA的try..catch捕获并处理,ServiceA.methodA事务仍然可能提交;如果他抛出的异常未被ServiceA.methodA捕获处理,ServiceA.methodA事务将回滚。
相关推荐
SpringBoot实战——仿b站项目(一)
热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。
Spring的嵌套事务(Propagation.NESTED)到底是个啥
SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子。Propagation.NESTED 则是外部事务的子事务, 如果外部事务 commit, 嵌套事务也会被 commit, 这个规则同样适用于rollback.嵌套事务开始执行时, 它将取得一个 savepoint, 如果这个嵌套事务失败, 我们将回滚到此 savepoint,嵌套事务是外部事务的一部分, 只有外部事务结束后它才会被提交.
西门子S7-1200与S7-200SMART的PROFINET通讯实战:从GSD文件生成到数据监控
本文详细解析了西门子S7-1200与S7-200SMART之间实现PROFINET通讯的完整实战流程。核心内容包括将S7-200SMART配置为智能IO设备、生成并安装GSD文件、在TIA Portal中进行网络组态与地址映射,最终实现双向数据交换与监控。该方案为整合新旧设备、构建灵活高效的工业自动化系统提供了可靠路径。
【spring】spring 的事务(transaction) 四 嵌套事务PROPAGATION_NESTED
文章目录1. 什么是嵌套事务PROPAGATION_NESTED2. PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别2.1 验证PROPAGATION_REQUIRES_NEW内层事务执行完就立即提交2.2 验证PROPAGATION_NESTED 内层事务执行完未立即提交2.3 验证PROPAGATION_NESTED 内层事务回滚 相关文章 spring 的事务(transaction) 一 基础概念介绍 spring 的事务(transaction) 二
2025年情感分析(SA)综述——论文阅读报告
2025年情感分析(SA)综述——论文阅读报告
OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)
本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。
Spring事务传播机制Propagation.REQUIRES_NEW详解及测试
REQUIRES_NEW官方文档解释: Create a new transaction, and suspend the current transaction if one exists. 意思是,创建一个新事务,如果当前存在事务,将这个事务挂起。也就是说如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。 先来总结一下结果: 1.标志REQUIR...
DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)
本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。
@Transactional中PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED区别
@Transactional1、Spring中对于事务传播性的定义2、PROPAGATION_REQUIRES_NEW 与 PROPAGATION_NESTED区别3、@Transactional主方法调用子方法事务的有无3.1 两个方法在同一个类中3.2 两个方法在不同类中 1、Spring中对于事务传播性的定义 PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,则新建一个事务 PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,则以非事务进行 PROPAG
避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决
本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。
第五节_PySide6基本窗口控件_主窗口和标签
本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见
Propagation.NESTED 和Propagation.REQUIRES_NEW的区别
Propagation.NESTED 和Propagation.REQUIRES_NEW的区别 首先感谢这个微博的博主,解决了我的疑惑。https://www.cnblogs.com/-flq/p/9768576.html 说到spring的事务传播行为,最难理解的不过是Propagation.REQUIRES_NEW和Propagation.NESTED了。上网搜了一下大家的描述,我自己总结...
YOLOv11 损失函数进阶:SlideLoss 让小目标检测精度飙升
创建self.loss_fun = loss_fun # 基础损失函数(如BCEWithLogitsLoss)self.loss_coef = loss_coef # 损失系数# 计算滑动权重:根据预测与真实值的差异判断样本难度# 难度越高,权重越大该类在原有损失函数的基础上,通过diff计算样本预测与真实值的差异(差异越大,样本越难),进而生成动态权重,实现对难样本的重点学习。
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED区别
https://blog.csdn.net/u011285162/article/details/19247711 最容易弄混淆的其实是 PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED, 那么这两种方式又有何区别呢? 我简单的翻译一下 Juergen Hoeller 的话 : PROPAGATION_REQUIRES_NEW ...
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED區別
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED两种传播机制的是容易混淆的。 1. 开启事务的多少,PROPAGATION_REQUIRES_NEW会开启很多事务,外部事务挂起,里面的事务独立执行,对性能的损耗较大。PROPAGATION_NESTED为父子事务,实际上是借助jdbc的savepoint实现的,属于同一个事物。 2. PROPA...
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
spring事务PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED区别
spring事务PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED区别 转载 2015年09月02日 23:14:35 标签:PROPAGATION_NESTED /PROPAGATION_REQUIRES /区别 10447 解惑 spring 嵌套事务 在所有使用 spring 的应用中,
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
【转】PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的区别
原文:https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-propagation 10.5.7Transaction propagation This section describes some semantics of transaction pro...
spring事务PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED区别(转载)
解惑 spring 嵌套事务 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看, 绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口中的定义 Java代码 收藏代码 [java] view plain copy
PROPAGATION_REQUIRED,PROPAGATN_REQUIRES_NEW,PROPAGATION_NESTED区别
PROPAGATION_REQUIRED嵌套时,不管是否用try catch,只要里外二个事务有一个出错,都会因rollback。因为是同一个事务范围。 PROPAGATN_REQUIRES_NEW被嵌套时,外面的事务不会影响里面的事务。如果里面的事务用了try catch,那么出错外面不会rollback,里面rollback。如果没用,里面的抛出错,会导致里外的事务都rollback。 P...
关于PROPAGATION_NESTED的理解
查了一些资料,感觉并不能很清晰地表达出两者的差异。所以打算自己总结一下。 先来看一下Spring中对于事务传播性的几种定义 PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY -- 支...
3455



被折叠的 条评论
为什么被折叠?



