This question already has answers here:
@Transactional method called from another method doesn't obtain a transaction
(4 个回答)
6年前关闭。
我正在研究如何 Spring 处理事务,我在问如果一个
我知道事务传播默认级别是
这是我的推理正确还是我遗漏了什么?如果在同一个实例上调用 2 个
这个怎么运作?
(4 个回答)
6年前关闭。
我正在研究如何 Spring 处理事务,我在问如果一个
@Transactional
注释方法在同一对象实例上调用另一个 @Transactional
注释方法会发生什么?我知道事务传播默认级别是
REQUIRED
所以如果我有一个用 method1()
的 @Transactional
注释的 MyObject
调用同一实例的 method2()
(用 @Transactional
注释)我认为,在 REQUIRED
级别之后,它会在method1()
创建的相同交易。这是我的推理正确还是我遗漏了什么?如果在同一个实例上调用 2 个
@Transactional
方法,我不确定会发生什么。这个怎么运作?
最佳答案
如果在同一个类中从method2()
调用method1()
,第二个方法的@Transactional
注解不会有任何作用,因为不是通过proxy调用,而是直接调用。仅当通过代理( Autowiring 的 bean,或以任何其他方式注入(inject)的某个实例)调用时,方法才会通过事务行为得到增强。
但一般来说,如果 method1()
和 method2()
在不同的类中,并且都用 @Transactional
注释(因此使用 REQUIRED
传播),那么它们将共享在 method1()
中启动的相同事务。
关于java - 如果一个@Transactional 注释方法在同一个对象实例上调用另一个@Transactional 注释方法会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29230337/
10-11 20:40