PROPAGATION_NESTED 与 PROPAGATION_REQUIRES_NEW 的区别:
它们非常类似 , 都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。使用 PROPAGATION_REQUIRES_NEW 时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务这是一个真正的嵌套事务。同时它需要 JTA 事务管理器的支持。 使用 PROPAGATION_NESTED 时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。 DataSourceTransactionManager 使用 savepoint 支持 PROPAGATION_NESTED 时,需要 JDBC 3.0 以上驱动及 1.4 以上的 JDK 版本支持。其它的 JTA TrasactionManager 实现可能有不同的支持方式。 PROPAGATION_REQUIRED 应该是我们首先的事务传播行为。它能够满足我们大多数的事务需求。
本文详细解析了PROPAGATION_NESTED和PROPAGATION_REQUIRES_NEW在事务传播行为上的区别,包括它们如何在存在或不存在活动事务时操作,以及如何在嵌套事务中进行交互。重点讨论了DataSourceTransactionManager的使用和savepoint支持下对JTA事务管理器的要求。
879

被折叠的 条评论
为什么被折叠?



