1.DeferredResult
一旦 在Servlet容器中启用了异步请求处理功能,控制器方法就可以包装任何支持的控制器方法返回值DeferredResult,如下例所示:
@GetMapping("/quotes")
@ResponseBody
public DeferredResult<String> quotes() {
DeferredResult<String> deferredResult = new DeferredResult<String>();
// Save the deferredResult somewhere..
return deferredResult;
}
// From some other thread...
deferredResult.setResult(data);
控制器可以从不同的线程异步生成返回值 - 例如,响应外部事件(JMS消息),计划任务或其他事件。
2.Callable
控制器可以使用包装任何支持的返回值java.util.concurrent.Callable,如以下示例所示:
@PostMapping
public Callable<String> processUpload(final MultipartFile file) {
return new Callable<String>() {
public String call() throws Exception {
// ...
return "someView";
}
};
}
然后可以通过已配置的 任务运行给定任务来获取返回值 TaskExecutor。
本文探讨了Spring MVC框架中的两种异步处理机制:DeferredResult和Callable。通过使用DeferredResult,控制器可以从不同线程异步生成返回值,适用于响应外部事件。而Callable则允许控制器方法直接返回一个可调用对象,其结果可通过配置的TaskExecutor获取。
893

被折叠的 条评论
为什么被折叠?



