diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java index e0a2dde2..8b780bb0 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java @@ -19,13 +19,14 @@ package cn.hippo4j.config.springboot.starter.refresher.event; import cn.hippo4j.adapter.base.ThreadPoolAdapter; import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.config.springboot.starter.config.AdapterExecutorProperties; import cn.hippo4j.config.springboot.starter.support.DynamicThreadPoolAdapterRegister; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; import org.springframework.core.annotation.Order; import java.util.List; @@ -40,8 +41,11 @@ import static cn.hippo4j.config.springboot.starter.refresher.event.Hippo4jConfig */ @Slf4j @Order(ADAPTER_EXECUTORS_LISTENER) +@RequiredArgsConstructor public class AdapterExecutorsRefreshListener extends AbstractRefreshListener { + private final DynamicThreadPoolAdapterRegister dynamicThreadPoolAdapterRegister; + @Override public String getNodes(AdapterExecutorProperties properties) { return properties.getNodes(); @@ -56,19 +60,22 @@ public class AdapterExecutorsRefreshListener extends AbstractRefreshListener { - if (Objects.equals(val.mark(), each.getMark())) { + threadPoolAdapterMap.forEach((key, val) -> { + if (Objects.equals(val.mark(), each.getMark())) { + ThreadPoolAdapterState threadPoolState = val.getThreadPoolState(each.getThreadPoolKey()); + if (!Objects.equals(threadPoolState.getCoreSize(), each.getCorePoolSize()) + || !Objects.equals(threadPoolState.getMaximumSize(), each.getMaximumPoolSize())) { val.updateThreadPool(BeanUtil.convert(each, ThreadPoolAdapterParameter.class)); DynamicThreadPoolAdapterRegister.ADAPTER_EXECUTORS_MAP.put(buildKey, each); } - }); - } + } + }); } } }