Spring boot 是否在下拖工作线程中处理长时间运行的任务?
我有一个带有Spring boot 是否在下拖工作线程中处理长时间运行的任务?,spring-boot,undertow,Spring Boot,Undertow,我有一个带有@RestController的Spring Boot应用程序,我使用Undertow作为嵌入式服务器。现在,据我所知,Undertow使用两个线程池:一个是处理传入请求的IO线程池,另一个是授权阻塞任务的工作线程池。如前所述,在一个工作线程上调用Spring控制器方法。但是,控制器方法中的逻辑可能需要一些时间才能完成。因此,我考虑使用Spring对异步请求处理的支持,从controller方法返回一个可调用的。例如: @RestController public class MyC
@RestController
的Spring Boot应用程序,我使用Undertow作为嵌入式服务器。现在,据我所知,Undertow使用两个线程池:一个是处理传入请求的IO线程池,另一个是授权阻塞任务的工作线程池。如前所述,在一个工作线程上调用Spring控制器方法。但是,控制器方法中的逻辑可能需要一些时间才能完成。因此,我考虑使用Spring对异步请求处理的支持,从controller方法返回一个可调用的
。例如:
@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();
};
}
}
@RestController
公共类MyController{
@RequestMapping(path=“/myPath”,method=RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
公共可调用句柄(){
//该零件由下拖工作螺纹处理
doSomething();
返回()->{
//该部分被传递给Spring管理的线程
返回doSomeLongerProcessing();
};
}
}
我现在的问题是:您真的会使用额外的线程池来处理运行时间较长的任务吗?还是最好的做法是让所有内容都在底层工作线程中运行?据我所知,这正是工作线程池的用途,对吗?您要将工作线程模式设置为什么等待策略?默认情况下,它是阻塞的。所以我不建议在不改变类型的情况下发送它。如果不是这样的话,您将有一个工作线程在阻塞状态下等待来自Spring托管线程池的响应。我不知道有一个等待策略。所以我使用默认值。谢谢,我去看看。