PROPAGATION_REQUIRES_NEW PROPAGATION_NESTED 区别

sp:Propagation.REQUIRED vs Propagation.REQUIRES_NEW Introductionspring事务propagation(事务传播特性)配置,常用的配置项为Propagation.REQUIRED或者Propagation.REQUIRES_NEW。Propagation.REQUIRED:如果当前有事务,则在当前事务中执行,如果没有事务,则创建一个事务执行。 Propagation.REQUIRES_NEW:无论如何创建一个新的事务执行。这里的事务指的 阅读详情
  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.REQUIRES_NEW、NEVER和MANDATORY的验证及失效问题 本文将重点介绍Spring事务传播的三种行为:Propagation.REQUIRES_NEW、Propagation.NEVER和Propagation.MANDATORY,并探讨可能导致这些传播行为失效的诡异问题。在同一个类中的方法内部直接调用另一个使用了事务传播行为的方法时,传播行为可能会失效。在同一个类中的非事务方法调用了一个使用了事务传播行为的方法时,传播行为可能会失效。为了解决这个问题,可以将非事务方法移到另一个类中,或者在非事务方法上添加事务注解以启动一个新的事务。4.3. 异步方法问题。 阅读详情

相关推荐

spring事务Propagation及其实现原理(传播属性示例分析)

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

十年呵护的专栏 3823

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

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

cainiao1412的博客 5529

CMap数据库实战:从基因表达谱到药物重定位的可视化分析

本文详细介绍了如何利用CMap数据库进行药物重定位的可视化分析。通过实战演示,从差异基因列表准备、CMap查询参数设置,到结果筛选与高级可视化(如热图与OncoPrint风格图),系统讲解了从数据到洞察的全流程,并提供了关键的解读与验证指南,帮助研究者高效挖掘老药新用的潜力。

mango的博客 587

【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万+

AI搜索优化(GEO)实战指南:抢占智能对话流量入口

AI SEO,是针对生成式AI平台(如DeepSeek、豆包、Kimi等)的优化策略,旨在通过适配AI算法对内容的理解和引用逻辑,提升品牌在AI生成答案中的可见性与权威性,从而在对话式搜索场景中抢占流量入口。:强化内容经验性(Experience)、专业性(Expertise)、权威性(Authoritativeness)、可信度(Trustworthiness)内容需避免夸大描述,提供可验证的细节(如数据、用户评价)。

Baixue5209的博客 6775

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 305

@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

JMeter脚本录制-快速上手篇

有的项目应用场景下,压测时,需要考虑带宽因素,压测不只是压测接口,静态资源也要一起压测。一般来说,静态资源比较多,如果一个个手工去写请求,是比较繁琐的,此时,可以使用Jmeter的脚本录制功能。 步骤1,创建脚本录制模版。 JMeter菜单:文件>模版,下拉选择到Recording,点击“Create”按钮; 填写录制参数: hostToRecord:填写要录制的主机域名,例如,我们这里填入:www.baidu.com schemeToRecord:填写要录制的模式,例如,htt...

软件测试大叔 5734

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

基于DFT的mbist sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 920

手把手教你学Simulink——基于Simulink的储能PCS(功率转换系统)离网V/f控制仿真示例

本文带你从零开始,在Simulink中硬核还原了一套完整的100kW 储能PCS离网V/f控制系统。通过引入:✅无PLL的自主角度生成机制(实现真正的“构网”能力)✅电压外环与电流内环的双闭环解耦架构(兼顾稳态精度与动态响应)✅黑启动软充电与有源阻尼等工程化手段(确保系统平滑建压与抗谐振)核心收获透彻理解了储能系统在无大电网支撑下的自主运行机理。掌握了从“跟网(Grid-Following)”向“构网(Grid-Forming)”跨越的控制算法核心差异。

MHD0815的博客 77

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

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2400

PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED區別

PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED两种传播机制的是容易混淆的。      1. 开启事务的多少,PROPAGATION_REQUIRES_NEW会开启很多事务,外部事务挂起,里面的事务独立执行,对性能的损耗较大。PROPAGATION_NESTED为父子事务,实际上是借助jdbc的savepoint实现的,属于同一个事物。 2. PROPA...

维度 527

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 187

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【转】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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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、付费专栏及课程。

余额充值