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

我无法理解PROPAGATION_REQUIRES_NEWPROPAGATION_NESTED传播策略之间的行为差​​异。 在我看来,在这两种情况下,当前的stream程是回滚的,但不是整个交易。 任何线索?

请参阅此链接: PROPAGATION_NESTED与PROPAGATION_REQUIRES_NEW? Juergen Hoeller解释得很好

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

另一方面,PROPAGATION_NESTED启动一个“嵌套”事务,它是现有事务的一个真正的子事务。 会发生什么是在嵌套事务开始时将会采取一个保存点。 如果嵌套事务失败,我们将回滚到该保存点。 嵌套事务是外部事务的一部分,所以它只会在外部事务结束时被提交。 …

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

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

检查弹簧文档

请找出差异

 1.) Use of NESTED Transaction 

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

2.)使用必需交易支持当前交易,如果不存在,则创build一个新交易。 。 这意味着像银行领域,如提取,存款,更新交易

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