我无法理解传播策略PROPAGATION_REQUIRES_NEW
和PROPAGATION_NESTED
传播策略之间的行为差异。在我看来,在这两种情况下,当前进程都是回滚的,而不是整个事务。有什么线索吗?
3 回答
请参阅此链接: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 事务 创建一个新事务,如果存在则暂停当前事务。