我有一个@RestController
的Spring Boot应用程序,我使用Undertow作为嵌入式服务器。现在,据我所知,Undertow使用两个线程池:一个处理传入请求的IO线程池和一个委托阻塞任务的工作线程池。正如已经回答here一样,Spring控制器方法在其中一个工作线程上调用。但是,控制器方法中的逻辑可能需要一些时间才能完成。所以我考虑通过从控制器方法返回Callable
来使用Spring对异步请求处理的支持。例如:
@RestController
public class MyController {
@RequestMapping(path = "/myPath", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public Callable<MyResult> handle() {
// This part is handled by the Undertow worker thread
doSomething();
return () -> {
// This part is handed off to a thread managed by Spring
return doSomeLongerProcessing();
};
}
}
我现在的问题是:你真的会使用额外的线程池来处理运行时间更长的任务吗?或者最好的做法是让所有东西都在Undertow工作线程中运行?据我所知,这正是工作人员的用途,对吗?