繁体   English   中英

Spring 事务中 requires_new 和嵌套传播的区别

[英]Differences between requires_new and nested propagation in Spring transactions

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

请参阅此链接: PROPAGATION_NESTED 与 PROPAGATION_REQUIRES_NEW? Juergen Hoeller 解释得很好。 -- Spring Source Forum于2019年2月28日完全离线,但您可以在下面的引用中阅读文章的相关部分

PROPAGATION_REQUIRES_NEW 为给定范围启动一个新的、独立的“内部”事务。 该事务将完全独立于外部事务提交或回滚,具有自己的隔离范围、自己的一组锁等。外部事务将在内部事务开始时暂停,并在内部事务完成后恢复完全的。 ...

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

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

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

检查弹簧文档

请找出不同之处

1.) Use of NESTED Transaction

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

2.) 使用 REQUIRED Transaction 支持当前事务,如果不存在则创建一个新事务。 . 这意味着银行域,如取款,存款,更新交易

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM