mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-11-04 09:01:40 +08:00 
			
		
		
		
	refactor(core): 重构线程池自动配置
This commit is contained in:
		@@ -18,6 +18,7 @@ package top.continew.starter.core.autoconfigure.threadpool;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.slf4j.Logger;
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
import org.slf4j.LoggerFactory;
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Value;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.AutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 | 
					import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 | 
				
			||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
					import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
				
			||||||
@@ -25,6 +26,7 @@ import org.springframework.boot.task.TaskExecutorCustomizer;
 | 
				
			|||||||
import org.springframework.boot.task.TaskSchedulerCustomizer;
 | 
					import org.springframework.boot.task.TaskSchedulerCustomizer;
 | 
				
			||||||
import org.springframework.context.annotation.Bean;
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
import org.springframework.context.annotation.Lazy;
 | 
					import org.springframework.context.annotation.Lazy;
 | 
				
			||||||
 | 
					import org.springframework.scheduling.annotation.EnableScheduling;
 | 
				
			||||||
import top.continew.starter.core.constant.PropertiesConstants;
 | 
					import top.continew.starter.core.constant.PropertiesConstants;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -40,8 +42,11 @@ public class ThreadPoolAutoConfiguration {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final Logger log = LoggerFactory.getLogger(ThreadPoolAutoConfiguration.class);
 | 
					    private static final Logger log = LoggerFactory.getLogger(ThreadPoolAutoConfiguration.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 核心(最小)线程数 = CPU 核心数 + 1 */
 | 
					    @Value("${spring.task.execution.pool.core-size:#{T(java.lang.Runtime).getRuntime().availableProcessors() + 1}}")
 | 
				
			||||||
    private final int corePoolSize = Runtime.getRuntime().availableProcessors() + 1;
 | 
					    private int corePoolSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Value("${spring.task.execution.pool.max-size:#{T(java.lang.Runtime).getRuntime().availableProcessors() * 2}}")
 | 
				
			||||||
 | 
					    private int maxPoolSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 异步任务线程池配置
 | 
					     * 异步任务线程池配置
 | 
				
			||||||
@@ -50,14 +55,10 @@ public class ThreadPoolAutoConfiguration {
 | 
				
			|||||||
    @ConditionalOnProperty(prefix = "spring.task.execution.extension", name = PropertiesConstants.ENABLED, matchIfMissing = true)
 | 
					    @ConditionalOnProperty(prefix = "spring.task.execution.extension", name = PropertiesConstants.ENABLED, matchIfMissing = true)
 | 
				
			||||||
    public TaskExecutorCustomizer taskExecutorCustomizer(ThreadPoolExtensionProperties properties) {
 | 
					    public TaskExecutorCustomizer taskExecutorCustomizer(ThreadPoolExtensionProperties properties) {
 | 
				
			||||||
        return executor -> {
 | 
					        return executor -> {
 | 
				
			||||||
            if (executor.getMaxPoolSize() == Integer.MAX_VALUE) {
 | 
					 | 
				
			||||||
            // 核心(最小)线程数
 | 
					            // 核心(最小)线程数
 | 
				
			||||||
            executor.setCorePoolSize(corePoolSize);
 | 
					            executor.setCorePoolSize(corePoolSize);
 | 
				
			||||||
            // 最大线程数
 | 
					            // 最大线程数
 | 
				
			||||||
                executor.setMaxPoolSize(corePoolSize * 2);
 | 
					            executor.setMaxPoolSize(maxPoolSize);
 | 
				
			||||||
                // 队列容量
 | 
					 | 
				
			||||||
                executor.setQueueCapacity(executor.getMaxPoolSize());
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            // 当线程池的任务缓存队列已满并且线程池中的线程数已达到 maxPoolSize 时采取的任务拒绝策略
 | 
					            // 当线程池的任务缓存队列已满并且线程池中的线程数已达到 maxPoolSize 时采取的任务拒绝策略
 | 
				
			||||||
            executor.setRejectedExecutionHandler(properties.getExecution()
 | 
					            executor.setRejectedExecutionHandler(properties.getExecution()
 | 
				
			||||||
                .getRejectedPolicy()
 | 
					                .getRejectedPolicy()
 | 
				
			||||||
@@ -67,19 +68,19 @@ public class ThreadPoolAutoConfiguration {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 调度任务线程池配置
 | 
					     * 定时任务线程池配置
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Bean
 | 
					    @EnableScheduling
 | 
				
			||||||
    @ConditionalOnProperty(prefix = "spring.task.scheduling.extension", name = PropertiesConstants.ENABLED, matchIfMissing = true)
 | 
					    @ConditionalOnProperty(prefix = "spring.task.scheduling.extension", name = PropertiesConstants.ENABLED, matchIfMissing = true)
 | 
				
			||||||
 | 
					    public static class TaskSchedulerConfiguration {
 | 
				
			||||||
 | 
					        @Bean
 | 
				
			||||||
        public TaskSchedulerCustomizer taskSchedulerCustomizer(ThreadPoolExtensionProperties properties) {
 | 
					        public TaskSchedulerCustomizer taskSchedulerCustomizer(ThreadPoolExtensionProperties properties) {
 | 
				
			||||||
            return executor -> {
 | 
					            return executor -> {
 | 
				
			||||||
            if (executor.getPoolSize() <= 1) {
 | 
					 | 
				
			||||||
                executor.setPoolSize(corePoolSize);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
                executor.setRejectedExecutionHandler(properties.getScheduling()
 | 
					                executor.setRejectedExecutionHandler(properties.getScheduling()
 | 
				
			||||||
                    .getRejectedPolicy()
 | 
					                    .getRejectedPolicy()
 | 
				
			||||||
                    .getRejectedExecutionHandler());
 | 
					                    .getRejectedExecutionHandler());
 | 
				
			||||||
                log.debug("[ContiNew Starter] - Auto Configuration 'TaskScheduler' completed initialization.");
 | 
					                log.debug("[ContiNew Starter] - Auto Configuration 'TaskScheduler' completed initialization.");
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user