【问题标题】:@Transactional Spring chaining and self invoking [duplicate]@Transactional Spring 链接和自调用 [重复]
【发布时间】:2019-07-08 22:29:33
【问题描述】:

我想知道链接@Transactional 方法调用从同一类的私有方法调用的潜在副作用。从研究来看,这似乎是 Spring 的一个限制,可能会导致副作用,但是如果相应的类调用为也具有 @Transactional 注释的单独类怎么办?如果 B 失败,B 会回滚,A 会回滚吗?

@Service
public class A {
    @Autowired
    private B myB;

    @Transactional
    private void transactionA(){
        myB.transactionB();
    }

    public void doTransactionA() {
        transactionA();
    }
}

@Service
public class B {
    @Transactional
    private void transactionB(){
        //throw an exception
    }
}

【问题讨论】:

    标签: java spring-mvc spring-transactions


    【解决方案1】:

    首先。

    当使用代理时,你应该应用@Transactional注解 仅适用于具有公共可见性的方法

    因此,如果您只想在标准 Java Proxies 上运行,请记住这一点。
    CGLIB 涵盖任何其他情况。

    无论如何,这取决于。 @Transactional 注解支持事务传播。

    • PROPAGATION_REQUIRED:为应用设置的每个方法创建一个逻辑事务范围。基本上,每个“嵌套”方法调用都会加入现有事务(如果有)。
    • PROPAGATION_REQUIRES_NEW:对每个受影响的事务范围使用完全独立的事务。每个带注释的方法都有自己的事务。
    • PROPAGATION_NESTED:使用具有多个可以回滚的保存点的单个物理事务。基本上,如果嵌套调用失败,只会回滚那个调用,然后继续执行。

    如需更好的概览,请参阅docs

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多