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

新手上路,请多包涵

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

原文由 Alexis Dufrenoy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 960
2 个回答

请参阅此链接: PROPAGATION_NESTED 与 PROPAGATION_REQUIRES_NEW? Juergen Hoeller 解释得很好。 – Spring源码论坛自2019年2月28日起完全下线,但您可以阅读下方引述文章的相关部分

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

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

原文由 Ralph 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

检查 弹簧文档

原文由 Nandkumar Tekale 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题