2

我正在寻找一种使用 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步的更新。到目前为止,我一直在处理一个数据库,因此与上述没有问题。但是,不同的数据库用于选择和更新。(DataSource不同)对于每个DataSource,你可以通过拆分来处理功能,但是那样的话对现有逻辑的修改会很大。如上所述,有一种方法可以让 Spring 在执行所有处理的同时管理事务?

目前正在研究是否可以通过以下方法实现,但如果有更聪明的方法,请告诉我会有所帮助。1.用自己的注解(@Transactional2)打开多个Connections 2.Interceptor发现Repository的save*函数已经执行,切换DataSource

谢谢你

4

1 回答 1

1

在提供的示例中,您需要回滚的唯一事务是链接到更新语句的事务。在这种情况下,将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

由于选择而发生的任何异常都会将此事务标记为rollback-only,并且更新将回滚。

于 2018-06-26T21:15:16.047 回答