Spring 请求异步处理不起作用
我想让我的控制器(SpringMVC)并行处理请求。我在下面使用@Callable,但它不起作用,因为下一个请求是在第一个请求完成后处理的(返回视图)Spring 请求异步处理不起作用,spring,spring-mvc,Spring,Spring Mvc,我想让我的控制器(SpringMVC)并行处理请求。我在下面使用@Callable,但它不起作用,因为下一个请求是在第一个请求完成后处理的(返回视图) @RequestMapping(method=RequestMethod.GET) 公共可调用helloWorld(最终模型)抛出InterruptedException{ 返回新的可调用(){ @凌驾 公共字符串调用()引发异常{ 睡眠(5000); 返回“helloWorld”; } }; } 我需要任何特殊的代码吗?下面是关于处理程序方法
@RequestMapping(method=RequestMethod.GET)
公共可调用helloWorld(最终模型)抛出InterruptedException{
返回新的可调用(){
@凌驾
公共字符串调用()引发异常{
睡眠(5000);
返回“helloWorld”;
}
};
}
我需要任何特殊的代码吗?下面是关于处理程序方法的可调用的返回类型的说明
当应用程序想要生成时,可以返回Callable
在SpringMVC管理的线程中异步返回值
Spring将获取返回的Callable
实例,将其传递给ExecutorService
(实际上要进行更多的处理,但为了简单起见),然后在与初始请求不同的线程中执行它。等待5秒钟后,它将返回与视图名称“helloWorld”关联的视图。您的期望是什么?当返回Callable时,第二个请求触发helloWorld。但实际上,它会等到第一个可调用的返回“helloWorld”。我可以看到可调用的是在另一个线程中处理的,但为什么下一个请求必须等待第一个一端在另一个线程中处理呢。我以为整个请求都会并行处理……如何理解这个文档片段?控制器方法现在可以返回java.util.concurrent.Callable并从单独的线程生成返回值,而不是像往常一样返回值。同时,主Servlet容器线程被释放并允许处理其他请求。@pawb4r它工作正常。只是不要在同一个浏览器上同时尝试两个请求。例如,chrome会意识到它正在发送相同的请求,并且一次只发送一个。@pawb4r您读得非常好。浏览器的行为就是这样的。尝试跨浏览器或使用任何Java HTTP客户端。
@RequestMapping(method = RequestMethod.GET)
public Callable<String> helloWorld(final Model model) throws InterruptedException {
return new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(5000);
return "helloWorld";
}
};
}