具有restful应用程序的Spring事务

时间:2016-06-01 04:05:58

标签: java spring spring-mvc spring-boot spring-data

我正在进行春季启动工作,我需要澄清与transaction管理层有关的事情。

例如,我有2个类可以运行两个单独的作业(第一个作业是在数据库上创建配置文件,第二个作业是调用restful应用程序,也可以在不同系统上调用配置文件)。

这两项工作必须是交易性的。两者都需要成功。如果其中一个作业失败,它不应该在任何数据存储上创建任何配置文件)

因为我在 Spring 中真的很新。我希望得到建议,并且需要知道这种情况的最佳实践。

1 个答案:

答案 0 :(得分: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
            }
        }