Ограничить Spring Boot WebMvcConfigurer только указанными путями - PullRequest
0 голосов
/ 03 июня 2019

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

Если это невозможно или не рекомендуется, как правильно выполнить это?такое же поведение?

1 Ответ

1 голос
/ 03 июня 2019

TaskExecutor при настройке для / с WebMvcConfigurer на AsyncSupportConfigurer будет использоваться исключительно для асинхронной обработки веб-запросов. Все остальные запросы обрабатываются потоками обработки запросов по умолчанию, которые доступны в вашем контейнере сервлета.

Асинхронная природа определяется типом возвращаемого значения вашего метода. Асинхронные типы описаны в разделе MVC Async Справочного руководства Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...