refactor(core): 重构线程池自动配置

This commit is contained in:
2024-06-26 22:51:09 +08:00
parent 82574cd5ce
commit 0ad7b18521

View File

@@ -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(maxPoolSize);
executor.setMaxPoolSize(corePoolSize * 2);
// 队列容量
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 TaskSchedulerCustomizer taskSchedulerCustomizer(ThreadPoolExtensionProperties properties) { public static class TaskSchedulerConfiguration {
return executor -> { @Bean
if (executor.getPoolSize() <= 1) { public TaskSchedulerCustomizer taskSchedulerCustomizer(ThreadPoolExtensionProperties properties) {
executor.setPoolSize(corePoolSize); return executor -> {
} 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."); };
}; }
} }
} }