From 622e4054813c8e8df8e028f3f26841ad6c9622f5 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Mon, 29 Aug 2022 20:35:11 +0800 Subject: [PATCH] Optimize spring thread pool adaptation --- .../core/config/DynamicThreadPoolConfig.java | 7 ++++++- .../example/core/inittest/RunStateHandlerTest.java | 13 +++++++------ .../support/DynamicThreadPoolPostProcessor.java | 5 +++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/DynamicThreadPoolConfig.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/DynamicThreadPoolConfig.java index d9246917..c581863a 100644 --- a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/DynamicThreadPoolConfig.java +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/DynamicThreadPoolConfig.java @@ -78,7 +78,12 @@ public class DynamicThreadPoolConfig { return produceExecutor; } - @Bean + /** + * Test spring {@link ThreadPoolTaskExecutor}, Thread-pool id: testSpringThreadPoolTaskExecutor + * + * @return + */ + // @Bean @DynamicThreadPool public ThreadPoolTaskExecutor testSpringThreadPoolTaskExecutor() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java index 9c00093a..c29c682a 100644 --- a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java @@ -20,14 +20,15 @@ package cn.hippo4j.example.core.inittest; import cn.hutool.core.thread.ThreadUtil; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; -import org.springframework.core.task.TaskExecutor; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.Random; -import java.util.concurrent.*; +import java.util.concurrent.Executor; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import static cn.hippo4j.common.constant.Constants.EXECUTE_TIMEOUT_TRACE; @@ -44,8 +45,8 @@ public class RunStateHandlerTest { @Resource private ThreadPoolExecutor messageProduceDynamicThreadPool; - @Resource - private ThreadPoolTaskExecutor testThreadPoolTaskExecutor; + /*@Resource + private ThreadPoolTaskExecutor testSpringThreadPoolTaskExecutor;*/ private final ThreadPoolExecutor runStateHandlerTestExecutor = new ThreadPoolExecutor( 4, @@ -68,7 +69,7 @@ public class RunStateHandlerTest { // Start the dynamic thread pool to simulate running tasks runTask(messageConsumeTtlDynamicThreadPool); runTask(messageProduceDynamicThreadPool); - runTask(testThreadPoolTaskExecutor); + // runTask(testThreadPoolTaskExecutor); // Dynamically register thread pool ThreadPoolExecutor registerDynamicThreadPool = RegisterDynamicThreadPoolTest.registerDynamicThreadPool("auto-register-dynamic-thread-pool"); runTask(registerDynamicThreadPool); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java index 907c3c5f..d00fe5a8 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java @@ -164,14 +164,15 @@ public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { String threadNamePrefix = executorProperties.getThreadNamePrefix(); ExecutorProperties newExecutorProperties = buildExecutorProperties(executorProperties); ThreadPoolExecutor newDynamicPoolExecutor = ThreadPoolBuilder.builder() - .dynamicPool() + .threadPoolId(executorProperties.getThreadPoolId()) + .threadFactory(StringUtil.isNotBlank(threadNamePrefix) ? threadNamePrefix : executorProperties.getThreadPoolId()) .poolThreadSize(newExecutorProperties.getCorePoolSize(), newExecutorProperties.getMaximumPoolSize()) .workQueue(BlockingQueueTypeEnum.createBlockingQueue(newExecutorProperties.getBlockingQueue(), newExecutorProperties.getQueueCapacity())) - .threadFactory(StringUtil.isNotBlank(threadNamePrefix) ? threadNamePrefix : executorProperties.getThreadPoolId()) .executeTimeOut(newExecutorProperties.getExecuteTimeOut()) .keepAliveTime(newExecutorProperties.getKeepAliveTime(), TimeUnit.SECONDS) .rejected(RejectedPolicyTypeEnum.createPolicy(newExecutorProperties.getRejectedHandler())) .allowCoreThreadTimeOut(newExecutorProperties.getAllowCoreThreadTimeOut()) + .dynamicPool() .build(); return newDynamicPoolExecutor; }