我有一个关于 spring 事务传播的问题。我了解不同的 Spring 事务传播,即 Propagation.REQUIRED
, Propagation.REQUIRES_NEW
等。我不清楚的是,在具有不同传播值的嵌套事务的情况下,它会如何表现。
例如,如果我使用 @Transactional(propagation = Propagation.REQUIRED)
注释方法 m1
.如果我调用方法 m2
注释为 REQUIRES_NEW
.会有什么行为?如果m2
出现异常它会回滚 m2
中的更改吗?以及m1
或仅更改 m1
.
同样m1
注释为 REQUIRES_NEW
和 m2
作为REQUIRED
.
最佳答案
在 spring documentation for Transaction Propagation 中解释得很好.
方法的传播行为定义了 Spring 在进入/退出该方法时的行为方式,以及如果当时事务已经存在(或不存在)时会发生什么情况。
堆栈上层方法的传播行为(无论调用您的方法的是什么)都是无关紧要的。
举个例子:
外部 (m1):必需
内部(平方米):REQUIRES_NEW
结果:将为 m2 创建一个完全独立的事务,可以单独提交/回滚。具有 REQUIRED
的 m1 与 m2 无关。
外部(m1):REQUIRES_NEW
内部 (m2):必需
结果:Spring 将在输入 m2 时检查事务是否存在,如果不存在则创建事务。
关于java - Spring @Transactional 传播属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203919/