我想在一个功能中管理多个事务

时间:2018-06-26 20:27:29

标签: java spring spring-boot

我正在寻找一种使用Spring Boot管理多个事务的机制。 这是代码:

class Controller {
    @Autowired
    Service service;

class Service {
    @ Transactional
    public void execute () {
        // 1. select process using Repository
        // 2. Update process using Repository
        // 3. select process using Repository

如果在步骤3中发生异常,则需要在步骤2中回滚更新。 到现在为止,我一直在处理一个数据库,因此上面的工作没有问题。 但是,不同的DB用于选择和更新。 (数据源不同) 对于每个数据源,都可以通过拆分来处理该函数,但是在这种情况下,对现有逻辑的修改将很大。 如上所述,有一种方法可以让Spring在执行execute的所有处理的同时管理事务?

目前正在研究是否可以通过以下方法来实现,但是如果有更聪明的方法,请告诉我。 1.使用您自己的注释(@ Transactional2)打开多个连接 2.拦截器发现存储库的save *功能已执行,切换数据源

谢谢

1 个答案:

答案 0 :(得分:1)

在提供的示例中,您唯一需要回滚的事务是链接到update语句的事务。在这种情况下,将contentSize方法标记为execute就足够了,并确保您指定事务已链接到要更新的@transactional

datasource

由于选择而发生的任何异常都将将此事务标记为class Service { @ Transactional("updating-datasource") public void execute () { // 1. select process using Repository // 2. Update process using Repository // 3. select process using Repository ,并且更新将被回滚。