mirror of
https://github.com/continew-org/continew-starter.git
synced 2025-10-25 08:57:12 +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(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.");
|
};
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user