gpt4 book ai didi

java - 带有涉及两个 DAO 的遗留代码的 Spring 事务

转载 作者:行者123 更新时间:2023-12-02 09:03:01 25 4
gpt4 key购买 nike

我正在使用一些遗留代码,其中所有 Spring DAO 都使用 @Transactional 注释进行注释。现在我有一个业务需求,我需要在服务层中调用两个不同的 DAO,并在任何时候失败时回滚事务。

如何在 Spring 5 中实现这一目标,而不从 DAO 中删除 @Transactional 注释,并仍然从服务层使用它们。我认为下面的代码不起作用,因为每个 DAO 中的事务都是相互独立的。

提前非常感谢。

@Transactional
public FooDao {
}

@Transactional
public BarDao {
}


@Transactional
public TestServiceImple implements TestService {
fooDao.action1();
barDao.action2();
}

最佳答案

  1. 默认propagation @Transactional 注释的类型是 Propagation.REQUIRED .

Support a current transaction, create a new one if none exists.

  • 默认rollback @Transactional 注释的行为如下
  • By default, a transaction will be rolling back on RuntimeException and Error but not on checked exceptions (business exceptions).

    这两个默认配置将确保 TestServiceImple 中的 fooDao.action1()barDao.action2() 与相同的 txn 和回滚在服务层的任何 RuntimeException/自定义回滚配置上一起使用,前提是这两个方法是从使用 @Transactional 注释的同一服务方法调用的。

    示例

     @Transactional
    public TestServiceImple implements TestService {

    public void callDaoMethods(){
    fooDao.action1();
    barDao.action2();
    }

    }

    public TestServiceImple implements TestService {

    @Transactional
    public void callDaoMethods(){
    fooDao.action1();
    barDao.action2();
    }
    }

    关于java - 带有涉及两个 DAO 的遗留代码的 Spring 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031178/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com