Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 是否在下拖工作线程中处理长时间运行的任务?_Spring Boot_Undertow - Fatal编程技术网

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托管线程池的响应。我不知道有一个等待策略。所以我使用默认值。谢谢,我去看看。