須要注意一下 ThreadPoolTaskExecutor 和 Executor 區別spa
@Configuration public class ExecutorConfig { /** Set the ThreadPoolExecutor's core pool size. */ private int corePoolSize = 10; /** Set the ThreadPoolExecutor's maximum pool size. */ private int maxPoolSize = 100; /** Set the capacity for the ThreadPoolExecutor's BlockingQueue. */ private int queueCapacity = 100; @Bean public ThreadPoolTaskExecutor callerRunsExecutorService() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.setThreadNamePrefix("RunsExecutor-"); // rejection-policy:當pool已經達到max size的時候,如何處理新任務 // CALLER_RUNS:不在新線程中執行任務,而是有調用者所在的線程來執行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); executor.setKeepAliveSeconds(60); executor.initialize(); return executor; } @Bean("commonTaskExecutor") public Executor commonRunsAsync() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.setThreadNamePrefix("common---"); // rejection-policy:當pool已經達到max size的時候,如何處理新任務 // CALLER_RUNS:不在新線程中執行任務,而是有調用者所在的線程來執行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); executor.setKeepAliveSeconds(60); executor.initialize(); return executor; } }