如果一个 @Transactional 注释方法正在同一对象实例上调用另一个 @Transactional 注释方法,会发生什么情况?
What happens if one @Transactional annotated method is calling another @Transactional annotated method on the same object instance?
我正在研究如何 Spring 处理事务,我想问的是如果一个 @Transactional
注释方法在同一个对象实例上调用另一个 @Transactional
注释方法会发生什么?
我知道事务传播默认级别是 REQUIRED
所以如果我有一个 method1()
注释 @Transactional
调用 MyObject
的实例16=](用@Transactional
注释)我认为,在REQUIRED
级别之后,它是在method1()
创建的同一事务上执行的。
是我的推理正确还是我遗漏了什么?我不确定如果在同一个实例上调用 2 @Transactional
方法到底会发生什么。
它是如何工作的?
如果你在同一个class中从method1()
调用method2()
,第二个方法的@Transactional
注解不会有任何效果,因为它不是通过调用代理,但直接。仅当通过代理(自动装配的 bean,或以任何其他方式注入的某些实例)调用时,方法才通过事务行为得到增强。
但一般来说,如果 method1()
和 method2()
在不同的 class 中,并且都用 @Transactional
注释(所以使用 REQUIRED
传播),那么他们将共享在 method1()
.
开始的同一笔交易
我正在研究如何 Spring 处理事务,我想问的是如果一个 @Transactional
注释方法在同一个对象实例上调用另一个 @Transactional
注释方法会发生什么?
我知道事务传播默认级别是 REQUIRED
所以如果我有一个 method1()
注释 @Transactional
调用 MyObject
的实例16=](用@Transactional
注释)我认为,在REQUIRED
级别之后,它是在method1()
创建的同一事务上执行的。
是我的推理正确还是我遗漏了什么?我不确定如果在同一个实例上调用 2 @Transactional
方法到底会发生什么。
它是如何工作的?
如果你在同一个class中从method1()
调用method2()
,第二个方法的@Transactional
注解不会有任何效果,因为它不是通过调用代理,但直接。仅当通过代理(自动装配的 bean,或以任何其他方式注入的某些实例)调用时,方法才通过事务行为得到增强。
但一般来说,如果 method1()
和 method2()
在不同的 class 中,并且都用 @Transactional
注释(所以使用 REQUIRED
传播),那么他们将共享在 method1()
.