Java Spring控制器等待异步响应以管理下一个请求
我有一个请求端点:Java Spring控制器等待异步响应以管理下一个请求,java,spring,multithreading,Java,Spring,Multithreading,我有一个请求端点: @PostMapping("/verify") public Callable<String> verify() { logger.debug("----STARTED REQUEST-----"); Callable<String> callable = () -> { Thread.sleep(5000); logger.debug("_____FINISHED REQUEST_____");
@PostMapping("/verify")
public Callable<String> verify() {
logger.debug("----STARTED REQUEST-----");
Callable<String> callable = () -> {
Thread.sleep(5000);
logger.debug("_____FINISHED REQUEST_____");
return "foo";
};
logger.debug("FREED CONTROLLER");
return callable;
}
我想要的是:
----STARTED REQUEST-----
FREED CONTROLLER
----STARTED REQUEST-----
FREED CONTROLLER
----STARTED REQUEST-----
FREED CONTROLLER
_____FINISHED REQUEST_____
_____FINISHED REQUEST_____
_____FINISHED REQUEST_____
如何实现这一点?使用
可调用的方法创建服务
@Service
private class TaskService {
@Async
public String execute() {
try {
Thread.sleep(5000);
LOGGER.debug("_____FINISHED REQUEST_____");
return "foo";
} catch (InterruptedException e) {
throw new RuntimeException();
}
}
}
在控制器中,将callable定义为“TaskService”的execute方法``
@Autowired
TaskService taskService;
@PostMapping("/verify")
public Callable<String> verify() {
Callable<String> callable = taskservice::execute;
logger.debug("FREED CONTROLLER");
return callable;
}
在验证中使用线程,例如:
Thread thread = new Thread()
{
@Override
public void run()
{
System.out.println("Callable");
}
};
thread.start();
谢谢,它正在工作,但前提是我将@Async
注释添加到TaskService。执行
方法。事实上,它的日志记录正确,但当我发送请求时,我立即得到空响应,而无需等待。好的,但是控制器不会等待响应。请提供您的MVC配置。
@Configuration
@EnableAsync
public class AsyncConfig extends AsyncConfigurerSupport {
@Override
public Executor getAsyncExecutor() {
return Executors.newWorkStealingPool(); //will use as many threads as your processor has
}
}
Thread thread = new Thread()
{
@Override
public void run()
{
System.out.println("Callable");
}
};
thread.start();