Spring Boot - есть ли ярлыки для настройки TaskExecutor?

Просто хотел проверить, есть ли у кого-нибудь более быстрый способ установить TaskExecutor для Spring MVC при весенней загрузке (используя автоконфигурацию). Это то, что я до сих пор:

@Bean
protected ThreadPoolTaskExecutor mvcTaskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setThreadNamePrefix("my-mvc-task-executor-");
    executor.setCorePoolSize(5);
    executor.setMaxPoolSize(200);
    return executor;
}

@Bean
protected WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
            configurer.setTaskExecutor(mvcTaskExecutor());
        }
    };
}

У кого-нибудь есть лучший / более быстрый способ сделать это?

-Джошуа

1 ответ

Одним из способов достижения этого является использование класса ConcurrentTaskExceptor в Spring. Этот класс действует как адаптер между TaskExecutor Spring и Executor JDK.

@Bean
protected WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
            configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(5)));
        }
    };
}

Одна из проблем, описанных выше, заключается в том, что вы не можете указать максимальный размер пула. Но вы всегда можете создать новый метод фабрики, createThreadPool(int core, int max) чтобы получить настраиваемые пулы потоков.

Поскольку WebMvcConfigurerAdapter считается устаревшим с Srping 5, используйте интерфейс WebMvcConfigurer и переопределить определенный метод по умолчанию:

@Bean
protected WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
            configurer.setTaskExecutor(
                new ConcurrentTaskExecutor(Executors.newFixedThreadPool(5)));
        }
    };
} 
Другие вопросы по тегам