Я бы хотел настроить поддержку асинхронной обработки для подмножества сопоставлений запросов в моем приложении 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
, поэтому у меня есть класс @Configuration, который реализует WebMvcConfigurer
также:
@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
только для подмножества запросов, соответствующих шаблону ?
Если это невозможно или не рекомендуется, как правильно выполнить это?такое же поведение?