异步调用并立即从Spring Controller返回

时间:2016-08-08 00:08:43

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

我正在使用Spring Boot,我有一个POST端点,需要做各种事情,例如将对象持久保存到数据库,然后再调用3-4个其他服务。但是,我想在数据库调用持久化后立即返回响应,然后异步调用另一个线程上的其他服务?对其他3-4个服务的调用可以最终保持一致(例如,调用keen.io分析服务)。如何在Spring Boot中轻松实现?

2 个答案:

答案 0 :(得分:1)

我认为你甚至不需要弹簧来完成这项工作。您可以使用java.util.concurrent.CompletableFuture#runAsync在不同的线程上运行某些异步。

你也可以使用弹簧async support。只需使用@Async注释一个spring bean方法(在你的情况下返回void)。并且不要忘记通过使用@EnableAsync注释配置类来启用异步支持。

答案 1 :(得分:0)

一种解决方案是让一个正在运行的线程监视队列以确定何时执行某些工作。当请求完成其立即任务时,它将向队列添加信息,以便监视线程可以理解它需要做一些工作。您可以拥有一个监视队列的线程池来提高性能。这是基于事件的编程的一种相当标准的模式,它提供了使动作以异步方式运行的能力。