我想在我的Spring Boot应用程序中为匹配/async/*
的请求映射的子集配置异步处理支持。例子:
localhost:8080/async/downloadLargeFile
localhost:8080/async/longRunningRask
以第一个示例为例,我使用StreamingResponseBody
实现了以下方法:
@GetMapping
public ResponseEntity<StreamingResponseBody> downloadLargeFile() throws IOException {
long size = Files.size(path);
InputStream inputStream = Files.newInputStream(path);
return ResponseEntity.ok()
.contentLength(size)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=large_file.txt")
.body(inputStream::transferTo);
}
在StreamingResponseBody
的文档中,它指出我应该配置AsyncTaskExecutor
,因此我也具有实现WebMvcConfigurer
的@Configuration类:
@Configuration
public class AsyncConfigurer implements WebMvcConfigurer {
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(-1);
configurer.setTaskExecutor(asyncTaskExecutor());
}
@Bean
public AsyncTaskExecutor asyncTaskExecutor() {
return new SimpleAsyncTaskExecutor("async");
}
}
但是,我无法找到一种仅对符合给定模式的请求使用此任务执行程序的方法。
作为一个更普遍的问题-如何限制WebMvcConfigurer
仅适用于与模式匹配的请求子集?
如果不可能或不建议这样做,那么完成相同行为的正确方法是什么?
答案 0 :(得分:1)
在TaskExecutor
上为WebMvcConfigurer
配置AsyncSupportConfigurer
时,this
仅用于Web请求的异步处理。所有其他请求均由servlet容器上可用的默认请求处理线程处理。
异步性质由方法的返回类型定义。异步类型在Spring参考指南的MVC Async部分中进行了描述。