mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-10-31 22:57:19 +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,15 +68,14 @@ 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()); | ||||||
| @@ -83,3 +83,4 @@ public class ThreadPoolAutoConfiguration { | |||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user