Spring Data REST和Spring-AMQP事务

时间:2015-05-28 19:22:49

标签: transactions spring-data spring-data-rest spring-amqp

我在Spring-AMQP中使用Spring Data REST。我的目标基本上是保持数据库保存之间的原子性在POST request处理"自动"通过Spring Data REST,以及发送由带注释的@HandleAfterCreate处理程序发送的RabbitMQ消息,该处理程序在POST请求之后调用。处理程序简化示例下方。

EventHandler.java

@RepositoryEventHandler
@Component
public class UserEventHandler {

    ...

    @HandleAfterCreate
    public void sendCreatedEvent(User user) {
        sendRabbitEvent("CREATED");
    }
}

所以我问是否有任何类型的全局事务来保存Spring Data REST POST提交的数据库提交只有在处理程序成功运行后才能执行它?

我知道如果我使用@Transactional标记创建一个控制器并将它们放在一起,它会按预期工作,但我认为它不应该如何与Spring Data REST一起使用。下面是一个在Controller中声明POST的工作流程示例:

Controller.java

@RestController
public class MyRestController {

    ...

    @RequestMapping(value = "/foo", method = RequestMethod.POST)
    @Transactional
    public HttpEntity<MyEntity> create(@RequestBody MyEntity myEntity) {
        // do some validations..

        // save entity
        someRepository.save(myEntity);

        // sends RabbitMQ message
        sendRabbitEvent("CREATED");

        return new ResponseEntity<>(HttpStatus.CREATED);
    }
 }

这样,如果消息发送失败,则内容不会保存到数据库中。这就是我想要使用处理程序模型实现的目标。

感谢。

1 个答案:

答案 0 :(得分:0)