Spring事务中require_new和嵌套传播之间的区别


80

我无法理解PROPAGATION_REQUIRES_NEWPROPAGATION_NESTED传播策略之间的行为差​​异。在我看来,在这两种情况下,当前过程都是回滚的,而不是整个事务。有什么线索吗?


7
看到这个链接:forum.springsource.org/archive/index.php/t-16594.html-Juergen Hoeller很好地解释了这一点
Ralph

@Ralph:谢谢,这正是我想要的。您应该将其添加为答案。
亚历克西斯·杜弗雷诺伊

1
@Ralph:太好了,那将是一个最佳答案。
Nandkumar Tekale 2012年

1
因此,主要的区别在于,使用嵌套事务策略,可以将事务回滚到当前原子操作的开始,这与require_new策略中的操作相同,但是仅在整个过程结束时才提交,这与require_new策略完全不同,后者要求每个原子操作在结束时都将提交。
亚历克西斯·杜弗雷诺伊

1
@Ralph不幸的是,您的链接不再指向现有页面:(
knittl,

Answers:


117

看到此链接:PROPAGATION_NESTED与PROPAGATION_REQUIRES_NEW?Juergen Hoeller对此进行了很好的解释。-春季高峰论坛是完全脱机SICE 2019 2月28日,但你可以在下面的报价阅读文章的相关部分

PROPAGATION_REQUIRES_NEW为给定范围启动一个新的,独立的“内部”交易。此事务将完全独立于外部事务进行提交或回滚,具有自己的隔离范围,自己的一组锁等。外部事务将在内部事务的开始处挂起,并在内部事务具有完成。...

另一方面,PROPAGATION_NESTED启动“嵌套”事务,这是现有事务的真实子事务。将会发生的事情是,在嵌套事务开始时将获取一个保存点。如果嵌套事务失败,我们将回滚到该保存点。嵌套事务是外部事务的一部分,因此它将仅在外部事务的结尾提交。...


好的答案和好的问题。您的意见和下面的链接是对我很有用:byteslounge.com/tutorials/...
yaki_nuka

您在propagation_requires_new中描述的行为正确吗?原因是我检查了它回滚了两个事务。
eatSleepCode 2015年

如果嵌套事务失败,请澄清外部事务的行为(它也会失败吗?),反之亦然
gstackoverflow

因此,对于嵌套事务,当内部的一个回滚时,外部的一个在保存点继续,而当外部的一个回滚时,所有​​操作都回滚,对吗?
Wecherowski

行为上有什么不同?
gstackoverflow

14

PROPAGATION_REQUIRES_NEW:对每个受影响的交易范围使用完全独立的交易。在那种情况下,底层的物理事务是不同的,因此可以独立地提交或回滚,而外部事务不受内部事务回滚状态的影响。

PROPAGATION_NESTED:使用具有多个保存点的单个物理事务,它可以回滚到该保存点。这种部分回滚允许内部事务作用域触发其范围的回滚,尽管某些操作已回滚,但外部事务仍能够继续物理事务。此设置通常映射到JDBC保存点,因此仅适用于JDBC资源事务。

检查弹簧文档


2
是的,我了解下划线的区别,但是我看不到它的行为方式不同:在一种情况下,我会将a回滚到先前的保存点,在另一种情况下,我将回滚当前事务而不是外部事务,但是实际上,在两种情况下,我都将回滚到当前原子操作的开始,然后从该点重新开始。
亚历克西斯·杜弗洛尼

1
@Traroth:@Ralph链接上的两行将说明行为的差异。PROPAGATION_REQUIRES_NEW:外部事务将在内部事务的开始处暂停,并在内部事务完成后恢复。每个内部事务在完成时都会提交/回滚。PROPAGATION_NESTED:嵌套事务是外部事务的一部分,因此它将仅在外部事务的结尾提交。
Nandkumar Tekale 2012年

我同意,所以我建议他从他的评论中回答。
亚历克西斯·杜弗雷诺伊

1
@Traroth:我同意你的看法。:)他有最好的答案。
Nandkumar Tekale 2012年

-6

请找到区别

1.) Use of NESTED Transaction

如果当前事务存在,则在嵌套事务中执行,其他行为类似于PROPAGATION_REQUIRED。Spring支持嵌套事务

2.)使用必需的事务支持当前事务,如果不存在则创建一个新事务。。这意味着对于银行领域,例如提款,存款,更新交易

3.)使用REQUIRES_NEW事务创建一个新事务,如果存在则暂停当前事务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.