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)));
}
};
}