PROPAGATION_REQUIRES_NEW PROPAGATION_NESTED 区别

Spring事务传播:Propagation.REQUIRES_NEW、NEVER和MANDATORY的验证及失效问题 本文将重点介绍Spring事务传播的三种行为:Propagation.REQUIRES_NEW、Propagation.NEVER和Propagation.MANDATORY,并探讨可能导致这些传播行为失效的诡异问题。在同一个类中的方法内部直接调用另一个使用了事务传播行为的方法时,传播行为可能会失效。在同一个类中的非事务方法调用了一个使用了事务传播行为的方法时,传播行为可能会失效。为了解决这个问题,可以将非事务方法移到另一个类中,或者在非事务方法上添加事务注解以启动一个新的事务。4.3. 异步方法问题。 阅读详情
  1. PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于,

  2. PROPAGATION_REQUIRES_NEW 完全是一个新的事务, 而 PROPAGATION_NESTED

  3. 则是外部事务的子事务, 如果外部事务 commit, 潜套事务也会被 commit,

  4. 这个规则同样适用于 roll back

  5. 现在的情况就变得比较复杂了, 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 还是 rollback

    1、如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB也将回滚。

    2、如果ServiceB.methodB失败回滚,如果他抛出的异常被ServiceA.methodA的try..catch捕获并处理,ServiceA.methodA事务仍然可能提交;如果他抛出的异常未被ServiceA.methodA捕获处理,ServiceA.methodA事务将回滚。

spring事务Propagation及其实现原理(传播属性示例分析) spring事务传播属性示例分析 在TransactionDefinition类中,spring提供了6种传播属性,接下来分别用简单示例来说明。 温馨提醒:下文提到的加入当前事务,指的是底层使用同一个Connection,但是事务状态对象是可以重新创建的,并不影响。文章提到的当前只存在一个事务,表示的是共用底层的一个Connection,而不在乎创建了多少个事务状态对象(TransactionS... 阅读详情

相关推荐

SpringBoot实战——仿b站项目(一)

热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。

weixin_52880572的博客 3455

Spring的嵌套事务(Propagation.NESTED)到底是个啥

SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子。Propagation.NESTED 则是外部事务的子事务, 如果外部事务 commit, 嵌套事务也会被 commit, 这个规则同样适用于rollback.嵌套事务开始执行时, 它将取得一个 savepoint, 如果这个嵌套事务失败, 我们将回滚到此 savepoint,嵌套事务是外部事务的一部分, 只有外部事务结束后它才会被提交.

cainiao1412的博客 5529

西门子S7-1200与S7-200SMART的PROFINET通讯实战:从GSD文件生成到数据监控

本文详细解析了西门子S7-1200与S7-200SMART之间实现PROFINET通讯的完整实战流程。核心内容包括将S7-200SMART配置为智能IO设备、生成并安装GSD文件、在TIA Portal中进行网络组态与地址映射,最终实现双向数据交换与监控。该方案为整合新旧设备、构建灵活高效的工业自动化系统提供了可靠路径。

weixin_29271263的博客 245

【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) 二

m0_45406092的博客 1万+

2025年情感分析(SA)综述——论文阅读报告

2025年情感分析(SA)综述——论文阅读报告

Samdy_L的博客 2086

OCR开发实战:如何用PaddleOCR C++版实现本地文字识别(附模型文件处理技巧)

本文详细介绍了如何使用PaddleOCR C++版实现本地文字识别,包括环境搭建、工程编译、运行时优化等全流程。重点讲解了在VS2019/VS2022环境下配置PaddleOCR的CPU推理性能优化技巧,以及模型文件处理的实际应用方法,帮助开发者高效完成OCR本地化部署。

devops8pract的博客 334

Spring事务传播机制Propagation.REQUIRES_NEW详解及测试

REQUIRES_NEW官方文档解释: Create a new transaction, and suspend the current transaction if one exists. 意思是,创建一个新事务,如果当前存在事务,将这个事务挂起。也就是说如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。 先来总结一下结果: 1.标志REQUIR...

墨迹程序员 10万+

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1033

@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

LuQiaoYa的博客 3265

避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决

本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。

weixin_29213525的博客 726

第五节_PySide6基本窗口控件_主窗口和标签

本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见

su桥木的博客 1021

Propagation.NESTED 和Propagation.REQUIRES_NEW的区别

Propagation.NESTED 和Propagation.REQUIRES_NEW的区别 首先感谢这个微博的博主,解决了我的疑惑。https://www.cnblogs.com/-flq/p/9768576.html 说到spring的事务传播行为,最难理解的不过是Propagation.REQUIRES_NEW和Propagation.NESTED了。上网搜了一下大家的描述,我自己总结...

aiyaya_66da的博客 4844

YOLOv11 损失函数进阶:SlideLoss 让小目标检测精度飙升

创建self.loss_fun = loss_fun # 基础损失函数(如BCEWithLogitsLoss)self.loss_coef = loss_coef # 损失系数# 计算滑动权重:根据预测与真实值的差异判断样本难度# 难度越高,权重越大该类在原有损失函数的基础上,通过diff计算样本预测与真实值的差异(差异越大,样本越难),进而生成动态权重,实现对难样本的重点学习。

m0_64661770的博客 210

PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED区别

https://blog.csdn.net/u011285162/article/details/19247711 最容易弄混淆的其实是 PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED, 那么这两种方式又有何区别呢? 我简单的翻译一下 Juergen Hoeller 的话 : PROPAGATION_REQUIRES_NEW ...

qq_27088383的博客 415

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...

维度 527

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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 的应用中,

evilcry2012的专栏 989

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...

金戈铁马 366

spring事务PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED区别(转载)

解惑 spring 嵌套事务     在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看,  绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口中的定义  Java代码  收藏代码 [java] view plain copy

凌夏大叔的博客 799

PROPAGATION_REQUIRED,PROPAGATN_REQUIRES_NEW,PROPAGATION_NESTED区别

PROPAGATION_REQUIRED嵌套时,不管是否用try catch,只要里外二个事务有一个出错,都会因rollback。因为是同一个事务范围。 PROPAGATN_REQUIRES_NEW被嵌套时,外面的事务不会影响里面的事务。如果里面的事务用了try catch,那么出错外面不会rollback,里面rollback。如果没用,里面的抛出错,会导致里外的事务都rollback。 P...

Maya2000的专栏 1451

关于PROPAGATION_NESTED的理解

查了一些资料,感觉并不能很清晰地表达出两者的差异。所以打算自己总结一下。 先来看一下Spring中对于事务传播性的几种定义 PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY -- 支...

yanxin1213的博客 2万+
上一篇: 可重复读 读提交
下一篇: kafaka 保证可靠性和数据一致性
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值