package com.jcdm.framework.config; import com.jcdm.common.utils.Threads; import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; /** * çº¿ç¨‹æ± é…ç½® * * @author jc **/ @Configuration public class ThreadPoolConfig { // æ ¸å¿ƒçº¿ç¨‹æ± å¤§å° private int corePoolSize = 50; // 最大å¯åˆ›å»ºçš„线程数 private int maxPoolSize = 200; // 队列最大长度 private int queueCapacity = 1000; // çº¿ç¨‹æ± ç»´æŠ¤çº¿ç¨‹æ‰€å…许的空闲时间 private int keepAliveSeconds = 300; @Bean(name = "threadPoolTaskExecutor") public ThreadPoolTaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setMaxPoolSize(maxPoolSize); executor.setCorePoolSize(corePoolSize); executor.setQueueCapacity(queueCapacity); executor.setKeepAliveSeconds(keepAliveSeconds); // çº¿ç¨‹æ± å¯¹æ‹’ç»ä»»åŠ¡(æ— çº¿ç¨‹å¯ç”¨)的处ç†ç–ç•¥ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; } /** * 执行周期性或定时任务 */ @Bean(name = "scheduledExecutorService") protected ScheduledExecutorService scheduledExecutorService() { return new ScheduledThreadPoolExecutor(corePoolSize, new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), new ThreadPoolExecutor.CallerRunsPolicy()) { @Override protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); Threads.printException(r, t); } }; } }