我正在从事Spring Boot,需要澄清有关transaction管理的一些信息。

例如,我确实有两个运行两个单独作业的类(第一个作业是在数据库上创建配置文件,第二个作业是在其他系统上调用Restful应用程序也创建配置文件)。

这2个工作必须处于交易状态。两者都需要成功。如果一项工作失败,则不应在任何数据存储上创建任何配置文件)

因为我在这个春天真的很新。我希望能得到建议,并且需要了解这种情况下的最佳实践。

最佳答案

有一个facade pattern。我建议制作一个facade service来加入两个服务的逻辑。服务必须是分开的,因为使用配置文件和与其他系统进行通信是业务逻辑的不同部分。

例如,有ProfileServiceOuterService用于配置文件和外部通信。您可以编写SomeFacadeService来联接两个方法并将其包装在一个事务中。 @Transactional的默认传播为REQUIRED。因此,将在方法SomeFacadeService.doComplexJob上创建事务,并且方法profileService.createProfileouterService.doOuterJob将加入当前事务。如果其中之一发生异常,则整个SomeFacadeService.doComplexJob将回滚。

@Controller
public class SomeController {
@Autowired
            SomeFacadeService someFacadeService ;

    @RequestMapping("/someMapping")
    public void doSomeJob() {
        someFacadeService.doComplexJob();
    }
}

@Service
        public class SomeFacadeService {
            @Autowired
            ProfileService profileService;
            @Autowired
            OuterService outerService;

            @Transactional
            public void doComplexJob() {
                profileService.createProfile();
                outerService.doOuterJob();
            }
        }

        @Service
        public class ProfileService {
            @Transactional
            public void createProfile() {
                // create profile logic
            }
        }

09-13 10:35