在我们的项目中,我们在不同的Controller
中有一些异步请求,这些请求由不同的执行程序运行,其中一些是在执行程序之间共享的,一些是特定于某些执行程序的。
async请求的含义是:该方法返回DeferredResult
,由某个执行程序运行的任务填充。
目前,他们中的一些人从方法参数直接将大量数据(不存储在RAM中)写入OutputStream
,这是我们想要防止的,因为它似乎会导致数据损坏。
我发现这样做的唯一合适的方法是从控制器的方法返回StreamingResponseBody
。但在这种情况下,我无法分配一些特定的执行程序,它将执行给定执行程序的任务。我可以通过设置我自己的asyncBean
来更改公共执行程序,但这只会给我一个执行程序,而我想为各种任务设置多个执行程序。
答案 0 :(得分:0)
如果你想要任何动作的不同执行者,你可以通过在WebAsyncTask
@Controller
public class MyWebController3 {
@RequestMapping("/test3")
public
@ResponseBody
WebAsyncTask<String> handleRequest (HttpServletRequest r) {
System.out.println("asyncSupported: " + r.isAsyncSupported());
System.out.println(Thread.currentThread().getName());
Callable<String> callable = () -> {
System.out.println(Thread.currentThread().getName());
return "WebAsyncTask test";
};
//Use any task executor here
ConcurrentTaskExecutor t = new ConcurrentTaskExecutor(
Executors.newFixedThreadPool(1));
return new WebAsyncTask<>(10000L, t, callable);
}
}