This question already has answers here:
@Transactional method called from another method doesn't obtain a transaction

(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