@Configuration @EnableAsync public class TaskExecutorConfig { private static final int TASK_POOL_SIZE = 32; private static final int MAX_POOL_SIZE = 256; private static final int QUEUE_SIZE = 16384; @Bean(name = "taskExecutor") public static Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(TASK_POOL_SIZE); executor.setMaxPoolSize(MAX_POOL_SIZE); executor.setQueueCapacity(QUEUE_SIZE); executor.setThreadNamePrefix("TaskPool-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setAllowCoreThreadTimeOut(true); executor.initialize(); return executor; } }