From f62fcc739cea83346755ebcf1f6ad97b41b69130 Mon Sep 17 00:00:00 2001 From: baymax55 <35788491+baymax55@users.noreply.github.com> Date: Sun, 2 Oct 2022 14:40:20 +0800 Subject: [PATCH 01/30] Add test case for NoArgsConsumer (#753) --- .../common/function/NoArgsConsumerTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/function/NoArgsConsumerTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/function/NoArgsConsumerTest.java index 38249887..0c176522 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/function/NoArgsConsumerTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/function/NoArgsConsumerTest.java @@ -17,5 +17,18 @@ package cn.hippo4j.common.function; -public final class NoArgsConsumerTest { +import cn.hippo4j.common.toolkit.Assert; +import org.junit.jupiter.api.Test; + +import java.util.concurrent.atomic.AtomicBoolean; + +final class NoArgsConsumerTest { + + @Test + void accept() { + AtomicBoolean checkValue = new AtomicBoolean(false); + NoArgsConsumer noArgsConsumer = () -> checkValue.set(true); + noArgsConsumer.accept(); + Assert.isTrue(checkValue.get()); + } } From 63d9959948c04952ecb4797c6841395cefc3aabd Mon Sep 17 00:00:00 2001 From: pirme Date: Sun, 2 Oct 2022 14:40:37 +0800 Subject: [PATCH 02/30] Update the list of contributors --- README.md | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index da371244..82f4fdde 100644 --- a/README.md +++ b/README.md @@ -385,13 +385,6 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 - - - baymax55 -
- Baymax55 -
- qizhongju @@ -447,15 +440,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Null
- - + stronglong
Itermis
- + + janey668 @@ -511,15 +504,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Wangjie
- - + wangyi123456
Null
- + + Williamren97 @@ -575,15 +568,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Null
- - + li-xiao-shuang
李晓双 Li Xiao Shuang
- + + oreoft From 2a3f5973cb165626b0ff2b1a084ab5975bf1c1ab Mon Sep 17 00:00:00 2001 From: pirme Date: Sun, 2 Oct 2022 14:40:54 +0800 Subject: [PATCH 03/30] Update the list of contributors --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 82f4fdde..d2660791 100644 --- a/README.md +++ b/README.md @@ -243,30 +243,30 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 - - gewuwo + + baymax55
- 格悟沃 + Baymax55
- - hushtian + + gewuwo
- Null + 格悟沃
- - jinlingmei + + hushtian
Null
- - linlinjie + + jinlingmei
Null
From ad9a8f76edbd7eded9f4cd0c06ca1c6f0f42fb80 Mon Sep 17 00:00:00 2001 From: weihubeats Date: Sun, 2 Oct 2022 15:00:42 +0800 Subject: [PATCH 04/30] add PolarisRefresherHandler (#754) * add PolarisRefresherHandler * format code --- .../common/function/MatcherFunctionTest.java | 2 +- .../pom.xml | 41 +++++++++ .../config/ConfigHandlerConfiguration.java | 14 +++ .../refresher/PolarisRefresherHandler.java | 85 +++++++++++++++++++ pom.xml | 1 + 5 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java index 2a202302..93287ed2 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java @@ -22,7 +22,7 @@ import java.math.BigDecimal; import org.junit.Test; public final class MatcherFunctionTest { - + public static boolean matchTest(Matcher matcher, T value) { return matcher.match(value); } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml index 4bc2ab72..09c886ab 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml @@ -64,6 +64,47 @@ true + + com.tencent.polaris + polaris-configuration-factory + ${polaris.version} + true + + + com.tencent.polaris + router-rule + + + com.tencent.polaris + router-nearby + + + com.tencent.polaris + router-metadata + + + com.tencent.polaris + router-canary + + + com.tencent.polaris + router-set + + + com.tencent.polaris + router-isolated + + + com.tencent.polaris + router-healthy + + + io.grpc + grpc-all + + + + org.springframework.boot spring-boot-configuration-processor diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java index c77536a8..a374cb4e 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java @@ -20,9 +20,11 @@ package cn.hippo4j.config.springboot.starter.config; import cn.hippo4j.config.springboot.starter.refresher.*; import com.alibaba.cloud.nacos.NacosConfigManager; import com.alibaba.nacos.api.config.ConfigService; +import com.tencent.polaris.configuration.api.core.ConfigFileService; import io.etcd.jetcd.Client; import lombok.RequiredArgsConstructor; import org.apache.curator.framework.CuratorFramework; + import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -45,6 +47,8 @@ public class ConfigHandlerConfiguration { private static final String ETCD = "etcd.endpoints"; + private static final String POLARIS = "config.serverConnector"; + @RequiredArgsConstructor @ConditionalOnClass(ConfigService.class) @ConditionalOnMissingClass(NACOS_CONFIG_MANAGER_KEY) @@ -99,4 +103,14 @@ public class ConfigHandlerConfiguration { } } + @ConditionalOnClass(ConfigFileService.class) + @ConditionalOnProperty(prefix = BootstrapConfigProperties.PREFIX, name = POLARIS) + static class Polaris { + + @Bean + public PolarisRefresherHandler polarisRefresher(ConfigFileService configFileService) { + return new PolarisRefresherHandler(configFileService); + } + } + } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java new file mode 100644 index 00000000..c2825ed2 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.config.springboot.starter.refresher; + +import java.util.Map; +import java.util.Objects; + +import com.google.common.collect.Maps; +import com.tencent.polaris.configuration.api.core.ConfigFileService; +import com.tencent.polaris.configuration.api.core.ConfigKVFile; +import com.tencent.polaris.configuration.api.core.ConfigKVFileChangeListener; +import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo; +import lombok.RequiredArgsConstructor; + +import org.springframework.beans.factory.annotation.Value; + +/** + *@author : wh + *@date : 2022/10/1 15:24 + *@description: + */ +@RequiredArgsConstructor +public class PolarisRefresherHandler extends AbstractConfigThreadPoolDynamicRefresh { + + private final ConfigFileService configFileService; + + private static final String POLARIS_NAMESPACE = "${spring.dynamic.thread-pool.polaris.namespace:dev}"; + + private static final String POLARIS_FILE_GROUP = "${spring.dynamic.thread-pool.polaris.file.group:dynamic}"; + + private static final String POLARIS_FILE_NAME = "${spring.dynamic.thread-pool.polaris.file.name:root/bootstrap.yaml}"; + + private static final String POLARIS_FILE_TYPE = "${spring.dynamic.thread-pool.polaris.file.type:properties}"; + + @Value(POLARIS_NAMESPACE) + private String namespace; + + @Value(POLARIS_FILE_GROUP) + private String fileGroup; + + @Value(POLARIS_FILE_NAME) + private String fileName; + + @Override + public String getProperties() { + ConfigKVFile configFile = getConfigKVFile(); + configFile.getContent(); + return configFile.getContent(); + } + + @Override + public void afterPropertiesSet() { + ConfigKVFile configFile = getConfigKVFile(); + configFile.addChangeListener((ConfigKVFileChangeListener) event -> { + String content = configFile.getContent(); + Map newChangeValueMap = Maps.newHashMap(); + for (String key : event.changedKeys()) { + ConfigPropertyChangeInfo changeInfo = event.getChangeInfo(key); + newChangeValueMap.put(key, changeInfo.getNewValue()); + } + dynamicRefresh(content, newChangeValueMap); + }); + } + + private ConfigKVFile getConfigKVFile() { + return Objects.equals(POLARIS_FILE_TYPE, "yaml") ? configFileService.getConfigYamlFile(namespace, fileGroup, fileName) + : configFileService.getConfigPropertiesFile(namespace, fileGroup, fileName); + } + +} diff --git a/pom.xml b/pom.xml index 51fd6e3f..66f1ba0b 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,7 @@ 2.3.2.RELEASE 1.9.1 0.7.3 + 1.7.2 2.2.2 4.1.56.Final 9.0.55 From 83fea8e0c7e24425fbe965956a6ebdf28ebb86b5 Mon Sep 17 00:00:00 2001 From: pirme Date: Sun, 2 Oct 2022 15:00:54 +0800 Subject: [PATCH 05/30] Update the list of contributors --- README.md | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index d2660791..da371244 100644 --- a/README.md +++ b/README.md @@ -242,28 +242,21 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 Serenity - - - baymax55 -
- Baymax55 -
- gewuwo
格悟沃
- - + hushtian
Null
- + + jinlingmei @@ -271,6 +264,13 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 Null + + + linlinjie +
+ Null +
+ selectbook @@ -385,6 +385,13 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 + + + baymax55 +
+ Baymax55 +
+ qizhongju @@ -440,15 +447,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Null
- + + stronglong
Itermis
- - + janey668 @@ -504,15 +511,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Wangjie
- + + wangyi123456
Null
- - + Williamren97 @@ -568,15 +575,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Null
- + + li-xiao-shuang
李晓双 Li Xiao Shuang
- - + oreoft From c97b2b407c40eaec9035dc71c7b62a4b1815f30d Mon Sep 17 00:00:00 2001 From: weihubeats Date: Sun, 2 Oct 2022 15:42:50 +0800 Subject: [PATCH 06/30] Simplified thread pool creation (#756) * Simplified thread pool creation * update method name --- .../executor/support/ThreadPoolBuilder.java | 26 ++++++++++++++++--- .../config/etcd/config/ThreadPoolConfig.java | 12 +++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java index 1aa069c4..91ff100a 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java @@ -17,14 +17,19 @@ package cn.hippo4j.core.executor.support; +import java.math.BigDecimal; +import java.util.Optional; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + import cn.hippo4j.common.design.builder.Builder; import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; import cn.hippo4j.common.toolkit.Assert; -import org.springframework.core.task.TaskDecorator; -import java.math.BigDecimal; -import java.util.Optional; -import java.util.concurrent.*; +import org.springframework.core.task.TaskDecorator; /** * Thread-pool builder. @@ -221,6 +226,19 @@ public class ThreadPoolBuilder implements Builder { return new ThreadPoolBuilder(); } + /** + * Create dynamic thread pool by thread pool id + * @param threadPoolId threadPoolId + * @return ThreadPoolExecutor + */ + public static ThreadPoolExecutor builderDynamicPoolById(String threadPoolId) { + return ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .dynamicPool() + .build(); + } + private static ThreadPoolExecutor buildPool(ThreadPoolBuilder builder) { return AbstractBuildThreadPoolTemplate.buildPool(buildInitParam(builder)); } diff --git a/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java b/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java index 71e6d943..f8fcf79a 100644 --- a/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java +++ b/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java @@ -17,13 +17,14 @@ package cn.hippo4j.example.config.etcd.config; +import java.util.concurrent.ThreadPoolExecutor; + import cn.hippo4j.core.executor.DynamicThreadPool; import cn.hippo4j.core.executor.support.ThreadPoolBuilder; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.concurrent.ThreadPoolExecutor; - /** * @author : wh * @date : 2022/9/2 19:26 @@ -36,11 +37,6 @@ public class ThreadPoolConfig { @DynamicThreadPool public ThreadPoolExecutor messageConsumeDynamicExecutor() { String threadPoolId = "message-consume"; - ThreadPoolExecutor messageConsumeDynamicExecutor = ThreadPoolBuilder.builder() - .threadFactory(threadPoolId) - .threadPoolId(threadPoolId) - .dynamicPool() - .build(); - return messageConsumeDynamicExecutor; + return ThreadPoolBuilder.builderDynamicPoolById(threadPoolId); } } From 04b79acfc19725a9fdccb9ae9eeec1ad6770deb7 Mon Sep 17 00:00:00 2001 From: pirme Date: Sun, 2 Oct 2022 15:43:08 +0800 Subject: [PATCH 07/30] Update the list of contributors --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index da371244..92ed22b4 100644 --- a/README.md +++ b/README.md @@ -242,21 +242,28 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 Serenity + + + baymax55 +
+ Baymax55 +
+ gewuwo
格悟沃
- + + hushtian
Null
- - + jinlingmei @@ -312,15 +319,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
Null
- + + onesimplecoder
Alic
- - + CalebZYC @@ -376,21 +383,14 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
WuLang
- + + alexhaoxuan
Alexli
- - - - - baymax55 -
- Baymax55 -
From e8485921bb369bdbcdd2252f1ac7f60e63fa896b Mon Sep 17 00:00:00 2001 From: weihubeats Date: Sun, 2 Oct 2022 16:16:27 +0800 Subject: [PATCH 08/30] Simplified DynamicThreadPool usage (#757) * Simplified DynamicThreadPool usage * Simplified DynamicThreadPool usage --- .../executor/SpringDynamicThreadPool.java | 36 +++++++++++++++++++ .../config/etcd/config/ThreadPoolConfig.java | 6 ++-- .../core/config/DynamicThreadPoolConfig.java | 18 +++++----- 3 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java new file mode 100644 index 00000000..4c482897 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.core.executor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.Bean; + +/** + *@author : wh + *@date : 2022/10/2 16:10 + *@description: + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Bean +public @interface SpringDynamicThreadPool { +} diff --git a/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java b/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java index f8fcf79a..db3f1ad2 100644 --- a/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java +++ b/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java @@ -19,10 +19,9 @@ package cn.hippo4j.example.config.etcd.config; import java.util.concurrent.ThreadPoolExecutor; -import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.SpringDynamicThreadPool; import cn.hippo4j.core.executor.support.ThreadPoolBuilder; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -33,8 +32,7 @@ import org.springframework.context.annotation.Configuration; @Configuration public class ThreadPoolConfig { - @Bean - @DynamicThreadPool + @SpringDynamicThreadPool public ThreadPoolExecutor messageConsumeDynamicExecutor() { String threadPoolId = "message-consume"; return ThreadPoolBuilder.builderDynamicPoolById(threadPoolId); 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 c581863a..f59432ec 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 @@ -17,19 +17,19 @@ package cn.hippo4j.example.core.config; -import cn.hippo4j.core.executor.DynamicThreadPool; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +import cn.hippo4j.core.executor.SpringDynamicThreadPool; import cn.hippo4j.core.executor.support.ThreadPoolBuilder; import cn.hippo4j.example.core.handler.TaskTraceBuilderHandler; import cn.hippo4j.example.core.inittest.TaskDecoratorTest; import com.alibaba.ttl.threadpool.TtlExecutors; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; + import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import java.util.concurrent.Executor; -import java.util.concurrent.ThreadPoolExecutor; - import static cn.hippo4j.common.constant.Constants.AVAILABLE_PROCESSORS; import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_CONSUME; import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_PRODUCE; @@ -41,8 +41,7 @@ import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_PRODUC @Configuration public class DynamicThreadPoolConfig { - @Bean - @DynamicThreadPool + @SpringDynamicThreadPool public Executor messageConsumeTtlDynamicThreadPool() { String threadPoolId = MESSAGE_CONSUME; ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() @@ -59,8 +58,7 @@ public class DynamicThreadPoolConfig { return ttlExecutor; } - @Bean - @DynamicThreadPool + @SpringDynamicThreadPool public ThreadPoolExecutor messageProduceDynamicThreadPool() { String threadPoolId = MESSAGE_PRODUCE; ThreadPoolExecutor produceExecutor = ThreadPoolBuilder.builder() @@ -84,7 +82,7 @@ public class DynamicThreadPoolConfig { * @return */ // @Bean - @DynamicThreadPool + @SpringDynamicThreadPool public ThreadPoolTaskExecutor testSpringThreadPoolTaskExecutor() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.setThreadNamePrefix("test-spring-task-executor_"); From 5692ea2b7af2f7ccb89f38bf81e145a3e7d8442a Mon Sep 17 00:00:00 2001 From: Gdk666 <763366136@qq.com> Date: Mon, 3 Oct 2022 10:26:33 +0800 Subject: [PATCH 09/30] add Md5ConfigUtilTest test case (#758) * add BeanUtilTest test case * add BeanUtilTest test case * add BeanUtilTest test case * add ClassUtilTest test case * add ConfigExecutorTest test case * Revert "add ConfigExecutorTest test case" This reverts commit ffc00ff4 * add ConfigExecutorTest test case * add EnvUtilTest test case * add ConfigExecutorTest test case * add Md5ConfigUtilTest test case * Revert "add Md5ConfigUtilTest test case" This reverts commit ee949adc * add Md5ConfigUtilTest test case * Revert "add Md5ConfigUtilTest test case" This reverts commit ed638916 * add Md5ConfigUtilTest test case --- .../config/toolkit/Md5ConfigUtilTest.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java index c351aa50..28e7ebb8 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java @@ -17,8 +17,75 @@ package cn.hippo4j.config.toolkit; +import cn.hippo4j.common.toolkit.Assert; +import cn.hippo4j.config.model.ConfigAllInfo; +import cn.hutool.core.util.StrUtil; +import org.assertj.core.util.Lists; +import org.junit.Test; + +import java.io.IOException; +import java.util.Objects; + /** * Md5ConfigUtil Test */ public class Md5ConfigUtilTest { + + @Test + public void getKeyTest() { + String key = Md5ConfigUtil.getKey("DataId", "Group"); + Assert.isTrue(Objects.equals("DataId+Group", key)); + } + + @Test + public void getKeySpecialTest() { + String key = Md5ConfigUtil.getKey("DataId+", "Group"); + Assert.isTrue(Objects.equals("DataId%2B+Group", key)); + + String key1 = Md5ConfigUtil.getKey("DataId%", "Group"); + Assert.isTrue(Objects.equals("DataId%25+Group", key1)); + } + + @Test + public void getKeyTenantIdentifyTest() { + String key = Md5ConfigUtil.getKey("DataId", "Group", "Tenant", "Identify"); + Assert.isTrue(Objects.equals("DataId+Group+Tenant+Identify", key)); + } + + @Test + public void getKeyTenantIdentifySpecialTest() { + String key = Md5ConfigUtil.getKey("DataId+", "Group+", "Tenant+", "Identify"); + Assert.isTrue(Objects.equals("DataId%2B+Group%2B+Tenant%2B+Identify", key)); + } + + @Test + public void compareMd5ResultStringEmptyTest() { + String key = null; + try { + key = Md5ConfigUtil.compareMd5ResultString(Lists.newArrayList()); + } catch (IOException ignored) { + + } + Assert.isTrue(Objects.equals(StrUtil.EMPTY, key)); + } + + @Test + public void compareMd5ResultStringTest() { + String key = null; + try { + key = Md5ConfigUtil.compareMd5ResultString(Lists.newArrayList("DataId+Group")); + } catch (IOException ignored) { + + } + Assert.isTrue(Objects.equals("DataId%02Group%01", key)); + } + + @Test + public void getClientMd5MapTest() { + ConfigAllInfo configAllInfo = new ConfigAllInfo(); + configAllInfo.setDesc("hippo4j config"); + String tpContentMd5 = Md5ConfigUtil.getTpContentMd5(configAllInfo); + Assert.isTrue(StrUtil.isNotEmpty(tpContentMd5)); + } + } From 26a7ad63ba4541ae18854ba7f253c8df30d09ac5 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Wed, 5 Oct 2022 09:26:55 +0800 Subject: [PATCH 10/30] Format file blank line --- dev-support/hippo4j_spotless_formatter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-support/hippo4j_spotless_formatter.xml b/dev-support/hippo4j_spotless_formatter.xml index 5adb0996..162d395e 100644 --- a/dev-support/hippo4j_spotless_formatter.xml +++ b/dev-support/hippo4j_spotless_formatter.xml @@ -18,6 +18,7 @@ * limitations under the License. */ --> + From e211093325debc5c2b55c9af058e016d397b2a27 Mon Sep 17 00:00:00 2001 From: pirme Date: Wed, 5 Oct 2022 09:27:22 +0800 Subject: [PATCH 11/30] Update the list of contributors --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 92ed22b4..1190e364 100644 --- a/README.md +++ b/README.md @@ -115,15 +115,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 - - xqxyxchy + + Gdk666
Null
- - Gdk666 + + xqxyxchy
Null
From 1baf187ecedb181669e43de8a33300f117a778fd Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Wed, 5 Oct 2022 10:16:58 +0800 Subject: [PATCH 12/30] Fix checkstyle plugin scan bug --- .../common/api/ClientCloseHookExecute.java | 3 ++ .../constant/ChangeThreadPoolConstants.java | 16 +++++------ .../observer/AbstractSubjectCenter.java | 11 ++++---- .../common/executor/ExecutorFactory.java | 3 ++ .../common/executor/ThreadPoolManager.java | 6 ++-- .../support/BlockingQueueTypeEnum.java | 12 ++++++-- .../support/RejectedPolicyTypeEnum.java | 2 +- .../ResizableCapacityLinkedBlockingQueue.java | 28 ++++++++++++------- .../cn/hippo4j/common/model/InstanceInfo.java | 9 ++++++ .../common/model/WebIpAndPortInfo.java | 2 +- ...ThreadPoolRegisterCoreNotifyParameter.java | 5 +++- .../spi/DynamicThreadPoolServiceLoader.java | 9 ++++-- .../common/toolkit/ByteConvertUtil.java | 8 ++++-- .../hippo4j/common/toolkit/CalculateUtil.java | 4 ++- .../common/toolkit/CollectionUtil.java | 11 ++++---- .../cn/hippo4j/common/toolkit/FileUtil.java | 4 ++- .../cn/hippo4j/common/toolkit/Md5Util.java | 18 +++++++++--- .../hippo4j/common/toolkit/ReflectUtil.java | 4 +-- .../cn/hippo4j/common/toolkit/Singleton.java | 7 +++-- .../cn/hippo4j/common/toolkit/StringUtil.java | 13 +++++---- .../hippo4j/common/toolkit/UserContext.java | 3 ++ .../web/exception/AbstractException.java | 2 +- .../web/exception/ServiceException.java | 8 +++--- .../common/function/MatcherFunctionTest.java | 3 +- 24 files changed, 128 insertions(+), 63 deletions(-) diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java index a99e1a8d..9bda7204 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java @@ -32,6 +32,9 @@ public interface ClientCloseHookExecute { */ void closeHook(ClientCloseHookReq req); + /** + * Client close hook req. + */ @Data @Accessors(chain = true) class ClientCloseHookReq { diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java index d192b243..07bf223c 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java @@ -25,14 +25,14 @@ public class ChangeThreadPoolConstants { /** * Dynamic thread pool parameter change text */ - public static final String CHANGE_THREAD_POOL_TEXT = "[{}] Dynamic thread pool change parameter." + - "\n corePoolSize: {}" + - "\n maximumPoolSize: {}" + - "\n capacity: {}" + - "\n keepAliveTime: {}" + - "\n executeTimeOut: {}" + - "\n rejectedType: {}" + - "\n allowCoreThreadTimeOut: {}"; + public static final String CHANGE_THREAD_POOL_TEXT = "[{}] Dynamic thread pool change parameter." + + "\n corePoolSize: {}" + + "\n maximumPoolSize: {}" + + "\n capacity: {}" + + "\n keepAliveTime: {}" + + "\n executeTimeOut: {}" + + "\n rejectedType: {}" + + "\n allowCoreThreadTimeOut: {}"; /** * Dynamic thread pool parameter change separator diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java index 530f33df..125aa7c5 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java @@ -64,12 +64,10 @@ public class AbstractSubjectCenter { log.warn("Register observer. A string whose subject or observer is empty or empty."); return; } - List observers = OBSERVERS_MAP.get(subject); if (CollectionUtil.isEmpty(observers)) { observers = new ArrayList(); } - observers.add(observer); OBSERVERS_MAP.put(subject, observers); } @@ -90,12 +88,11 @@ public class AbstractSubjectCenter { * @param observer */ public static void remove(String subject, Observer observer) { - List observers; - if (StringUtil.isBlank(subject) || CollectionUtil.isEmpty((observers = OBSERVERS_MAP.get(subject))) || observer == null) { + List observers = OBSERVERS_MAP.get(subject); + if (StringUtil.isBlank(subject) || CollectionUtil.isEmpty(observers) || observer == null) { log.warn("Remove observer. A string whose subject or observer is empty or empty."); return; } - observers.remove(observer); } @@ -121,7 +118,6 @@ public class AbstractSubjectCenter { log.warn("Under the subject, there is no observer group."); return; } - observers.parallelStream().forEach(each -> { try { each.accept(observerMessage); @@ -131,6 +127,9 @@ public class AbstractSubjectCenter { }); } + /** + * Subject type. + */ public enum SubjectType { /** diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java index d38ccaed..664cc7bc 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java @@ -26,6 +26,9 @@ import java.util.concurrent.ThreadFactory; */ public class ExecutorFactory { + /** + * Thread pool management tool. + */ public static final class Managed { private static final String DEFAULT_NAMESPACE = "dynamic.thread-pool"; diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java index 9960b789..fd29b8f9 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java @@ -32,7 +32,7 @@ public class ThreadPoolManager { private Map>> resourcesManager; - private Map lockers = new ConcurrentHashMap(8); + private Map lockers = new ConcurrentHashMap(); private static final ThreadPoolManager INSTANCE = new ThreadPoolManager(); @@ -47,7 +47,7 @@ public class ThreadPoolManager { } private void init() { - resourcesManager = new ConcurrentHashMap(8); + resourcesManager = new ConcurrentHashMap(); } public void register(String tenantId, String group, ExecutorService executor) { @@ -60,7 +60,7 @@ public class ThreadPoolManager { synchronized (monitor) { Map> map = resourcesManager.get(tenantId); if (map == null) { - map = new HashMap(8); + map = new HashMap(); map.put(group, new HashSet()); map.get(group).add(executor); resourcesManager.put(tenantId, map); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java index 1d675fa5..0333f699 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java @@ -24,7 +24,13 @@ import java.util.Arrays; import java.util.Collection; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.*; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.SynchronousQueue; import java.util.stream.Stream; /** @@ -78,6 +84,8 @@ public enum BlockingQueueTypeEnum { this.name = name; } + private static final int DEFAULT_CAPACITY = 1024; + static { DynamicThreadPoolServiceLoader.register(CustomBlockingQueue.class); } @@ -105,7 +113,7 @@ public enum BlockingQueueTypeEnum { .orElseGet(() -> { int temCapacity = capacity; if (capacity == null || capacity <= 0) { - temCapacity = 1024; + temCapacity = DEFAULT_CAPACITY; } return new LinkedBlockingQueue(temCapacity); })); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java index 1a158816..eed9b2ae 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java @@ -50,7 +50,7 @@ public enum RejectedPolicyTypeEnum { @Getter private String name; - public RejectedExecutionHandler rejectedHandler; + private RejectedExecutionHandler rejectedHandler; RejectedPolicyTypeEnum(Integer type, String name, RejectedExecutionHandler rejectedHandler) { this.type = type; diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java index 6272e865..17034dc4 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java @@ -17,11 +17,15 @@ package cn.hippo4j.common.executor.support; +import java.util.AbstractQueue; +import java.util.Collection; +import java.util.Iterator; +import java.util.NoSuchElementException; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.*; -import java.util.concurrent.locks.*; -import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; /** * A clone of {@linkplain java.util.concurrent.LinkedBlockingQueue} @@ -61,8 +65,8 @@ import java.util.*; **/ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue implements - BlockingQueue, - java.io.Serializable { + BlockingQueue, + java.io.Serializable { private static final long serialVersionUID = -6903933977591709194L; @@ -229,8 +233,9 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue */ public ResizableCapacityLinkedBlockingQueue(Collection c) { this(Integer.MAX_VALUE); - for (Iterator it = c.iterator(); it.hasNext();) + for (Iterator it = c.iterator(); it.hasNext(); ) { add(it.next()); + } } // this doc comment is overridden to remove the reference to collections @@ -352,7 +357,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue final AtomicInteger count = this.count; putLock.lockInterruptibly(); try { - for (;;) { + for (; ; ) { if (count.get() < capacity) { insert(o); c = count.getAndIncrement(); @@ -458,7 +463,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue final ReentrantLock takeLock = this.takeLock; takeLock.lockInterruptibly(); try { - for (;;) { + for (; ; ) { if (count.get() > 0) { x = extract(); c = count.getAndDecrement(); @@ -698,6 +703,9 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue return new Itr(); } + /** + * Itr. + */ private class Itr implements Iterator { /* @@ -824,7 +832,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue last = head = new Node(null); // Read in all elements and place in queue - for (;;) { + for (; ; ) { @SuppressWarnings("unchecked") E item = (E) s.readObject(); if (item == null) { @@ -833,4 +841,4 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue add(item); } } -} \ No newline at end of file +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java index 7a527889..204e856a 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java @@ -113,6 +113,9 @@ public class InstanceInfo { this.actionType = actionType; } + /** + * Instance status. + */ public enum InstanceStatus { /** @@ -153,6 +156,9 @@ public class InstanceInfo { } } + /** + * Action type. + */ public enum ActionType { /** * ADDED @@ -170,6 +176,9 @@ public class InstanceInfo { DELETED } + /** + * Instance renew. + */ @Data @Accessors(chain = true) public static class InstanceRenew { diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/WebIpAndPortInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/WebIpAndPortInfo.java index b2b101c1..de16032e 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/WebIpAndPortInfo.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/WebIpAndPortInfo.java @@ -103,4 +103,4 @@ public class WebIpAndPortInfo { protected boolean contrastSegment(String appIp, String propIp) { return ALL.equals(propIp) || appIp.equals(propIp); } -} \ No newline at end of file +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.java index fc61c5cd..052c5cbf 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.java @@ -17,7 +17,10 @@ package cn.hippo4j.common.model.register.notify; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; /** * Dynamic thread-pool register core notify parameter. diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java index 529a9896..b80b246f 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java @@ -18,7 +18,11 @@ package cn.hippo4j.common.spi; import java.lang.reflect.InvocationTargetException; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.Map; +import java.util.ServiceLoader; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -86,7 +90,8 @@ public class DynamicThreadPoolServiceLoader { private static Object newServiceInstance(final Class clazz) { try { return clazz.getDeclaredConstructor().newInstance(); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + } catch (InstantiationException | IllegalAccessException | InvocationTargetException + | NoSuchMethodException e) { throw new ServiceLoaderInstantiationException(clazz, e); } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java index 102ba478..d1d30bf2 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java @@ -24,9 +24,11 @@ import java.text.DecimalFormat; */ public class ByteConvertUtil { - public static final Integer KB_SIZE = 2 << 9; - public static final Integer MB_SIZE = 2 << 19; - public static final Integer GB_SIZE = 2 << 29; + public static final int KB_SIZE = 2 << 9; + + public static final int MB_SIZE = 2 << 19; + + public static final int GB_SIZE = 2 << 29; public static String getPrintSize(long size) { DecimalFormat df = new DecimalFormat("#.00"); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java index b5c8a132..1f80b8ef 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java @@ -25,7 +25,9 @@ package cn.hippo4j.common.toolkit; */ public class CalculateUtil { + private static final int PERCENTAGE = 100; + public static int divide(int num1, int num2) { - return ((int) (Double.parseDouble(num1 + "") / Double.parseDouble(num2 + "") * 100)); + return ((int) (Double.parseDouble(num1 + "") / Double.parseDouble(num2 + "") * PERCENTAGE)); } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java index 61f263cd..139fa7d3 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java @@ -35,11 +35,12 @@ public class CollectionUtil { * @return */ public static T getFirst(Iterable iterable) { - Iterator iterator; - if (iterable != null && (iterator = iterable.iterator()) != null && iterator.hasNext()) { - return iterator.next(); + if (iterable != null) { + Iterator iterator = iterable.iterator(); + if (iterator != null && iterator.hasNext()) { + return iterator.next(); + } } - return null; } @@ -90,7 +91,7 @@ public class CollectionUtil { * @return */ public static boolean isEmpty(Iterator iterator) { - return null == iterator || false == iterator.hasNext(); + return null == iterator || !iterator.hasNext(); } /** diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java index 8868d0c7..6361c767 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java @@ -29,6 +29,8 @@ import java.io.InputStream; */ public class FileUtil { + private static final int ERROR_CODE = -1; + @SneakyThrows public static String readUtf8String(String path) { String resultReadStr; @@ -38,7 +40,7 @@ public class FileUtil { BufferedInputStream bis = new BufferedInputStream(inputStream); ByteArrayOutputStream buf = new ByteArrayOutputStream()) { int result = bis.read(); - while (result != -1) { + while (result != ERROR_CODE) { buf.write((byte) result); result = bis.read(); } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java index 2586f90d..931f683d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java @@ -33,6 +33,16 @@ public class Md5Util { private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + private static final char XF0 = 0xF0; + + private static final char XF = 0x0F; + + private static final int DATA_ID_GROUP_ID_THREE_LEN = 3; + + private static final int DATA_ID_GROUP_ID_FOUR_LEN = 4; + + private static final int DISPLACEMENT = 4; + private static final ThreadLocal MESSAGE_DIGEST_LOCAL = ThreadLocal.withInitial(() -> { try { return MessageDigest.getInstance("MD5"); @@ -65,8 +75,8 @@ public class Md5Util { int l = bytes.length; char[] out = new char[l << 1]; for (int i = 0, j = 0; i < l; i++) { - out[j++] = DIGITS_LOWER[(0xF0 & bytes[i]) >>> 4]; - out[j++] = DIGITS_LOWER[0x0F & bytes[i]]; + out[j++] = DIGITS_LOWER[(XF0 & bytes[i]) >>> DISPLACEMENT]; + out[j++] = DIGITS_LOWER[XF & bytes[i]]; } return new String(out); } @@ -86,12 +96,12 @@ public class Md5Util { sb.append(Constants.WORD_SEPARATOR); sb.append(dataIdGroupId[1]); // if have tenant, then set it - if (dataIdGroupId.length == 3) { + if (dataIdGroupId.length == DATA_ID_GROUP_ID_THREE_LEN) { if (StringUtil.isNotBlank(dataIdGroupId[2])) { sb.append(Constants.WORD_SEPARATOR); sb.append(dataIdGroupId[2]); } - } else if (dataIdGroupId.length == 4) { + } else if (dataIdGroupId.length == DATA_ID_GROUP_ID_FOUR_LEN) { if (StringUtil.isNotBlank(dataIdGroupId[2])) { sb.append(Constants.WORD_SEPARATOR); sb.append(dataIdGroupId[2]); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java index db5c343d..faca0979 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java @@ -61,7 +61,7 @@ public class ReflectUtil { } public static T setAccessible(T accessibleObject) { - if (null != accessibleObject && false == accessibleObject.isAccessible()) { + if (null != accessibleObject && !accessibleObject.isAccessible()) { accessibleObject.setAccessible(true); } return accessibleObject; @@ -121,7 +121,7 @@ public class ReflectUtil { cn.hutool.core.lang.Assert.notNull(field, "Field in [{}] not exist !", obj); final Class fieldType = field.getType(); if (null != value) { - if (false == fieldType.isAssignableFrom(value.getClass())) { + if (!fieldType.isAssignableFrom(value.getClass())) { final Object targetValue = Convert.convert(fieldType, value); if (null != targetValue) { value = targetValue; diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java index 4e5ef959..fa36a77a 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java @@ -55,8 +55,11 @@ public final class Singleton { */ public static T get(String key, Supplier supplier) { Object result = SINGLE_OBJECT_POOL.get(key); - if (result == null && (result = supplier.get()) != null) { - SINGLE_OBJECT_POOL.put(key, result); + if (result == null) { + result = supplier.get(); + if (result != null) { + SINGLE_OBJECT_POOL.put(key, result); + } } return result != null ? (T) result : null; } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java index a092278f..d843f5e7 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java @@ -63,14 +63,17 @@ public class StringUtil { * @return */ public static boolean isBlank(CharSequence str) { - int length; - if ((str == null) || ((length = str.length()) == 0)) { + if ((str == null)) { + return true; + } + int length = str.length(); + if (length == 0) { return true; } for (int i = 0; i < length; i++) { char c = str.charAt(i); boolean charNotBlank = Character.isWhitespace(c) || Character.isSpaceChar(c) || c == '\ufeff' || c == '\u202a'; - if (charNotBlank == false) { + if (!charNotBlank) { return false; } } @@ -104,7 +107,7 @@ public class StringUtil { * @return */ public static boolean isNotBlank(CharSequence str) { - return isBlank(str) == false; + return !isBlank(str); } /** @@ -114,7 +117,7 @@ public class StringUtil { * @return */ public static boolean isAllNotEmpty(CharSequence... args) { - return false == hasEmpty(args); + return !hasEmpty(args); } /** diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java index 5b433671..67df6909 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java @@ -46,6 +46,9 @@ public class UserContext { USER_THREAD_LOCAL.remove(); } + /** + * User info. + */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java index 22ccaec5..07429614 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java @@ -25,7 +25,7 @@ import lombok.Getter; public class AbstractException extends RuntimeException { @Getter - public final ErrorCode errorCode; + private final ErrorCode errorCode; public AbstractException(String message, Throwable throwable, ErrorCode errorCode) { super(message, throwable); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java index 79d03838..f0a357da 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java @@ -59,9 +59,9 @@ public class ServiceException extends AbstractException { @Override public String toString() { - return "ServiceException{" + - "code='" + errorCode.getCode() + "'," + - "message='" + errorCode.getMessage() + "'" + - '}'; + return "ServiceException{" + + "code='" + getErrorCode().getCode() + "'," + + "message='" + getErrorCode().getMessage() + "'" + + '}'; } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java index 93287ed2..df98ab27 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/function/MatcherFunctionTest.java @@ -18,9 +18,10 @@ package cn.hippo4j.common.function; import cn.hippo4j.common.toolkit.Assert; -import java.math.BigDecimal; import org.junit.Test; +import java.math.BigDecimal; + public final class MatcherFunctionTest { public static boolean matchTest(Matcher matcher, T value) { From 00440506c2feae80cd33a6c2e090c5365a39fa32 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Wed, 5 Oct 2022 14:35:25 +0800 Subject: [PATCH 13/30] Fix ci errors --- .../hippo4j/auth/filter/JWTAuthorizationFilter.java | 2 +- .../ResizableCapacityLinkedBlockingQueue.java | 12 ++++++------ .../common/spi/DynamicThreadPoolServiceLoader.java | 2 +- .../cn/hippo4j/common/toolkit/ByteConvertUtil.java | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java index 5f46ffe9..7ec3c66b 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java @@ -85,7 +85,7 @@ public class JWTAuthorizationFilter extends BasicAuthenticationFilter { String resultStatus = "-1"; if (ex instanceof ServiceException) { ServiceException serviceException = (ServiceException) ex; - resultStatus = serviceException.errorCode.getCode(); + resultStatus = serviceException.getErrorCode().getCode(); } response.getWriter().write(JSONUtil.toJSONString(Results.failure(resultStatus, ex.getMessage()))); response.getWriter().flush(); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java index 17034dc4..2df8b54d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java @@ -65,8 +65,8 @@ import java.util.concurrent.locks.ReentrantLock; **/ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue implements - BlockingQueue, - java.io.Serializable { + BlockingQueue, + java.io.Serializable { private static final long serialVersionUID = -6903933977591709194L; @@ -233,7 +233,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue */ public ResizableCapacityLinkedBlockingQueue(Collection c) { this(Integer.MAX_VALUE); - for (Iterator it = c.iterator(); it.hasNext(); ) { + for (Iterator it = c.iterator(); it.hasNext();) { add(it.next()); } } @@ -357,7 +357,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue final AtomicInteger count = this.count; putLock.lockInterruptibly(); try { - for (; ; ) { + for (;;) { if (count.get() < capacity) { insert(o); c = count.getAndIncrement(); @@ -463,7 +463,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue final ReentrantLock takeLock = this.takeLock; takeLock.lockInterruptibly(); try { - for (; ; ) { + for (;;) { if (count.get() > 0) { x = extract(); c = count.getAndDecrement(); @@ -832,7 +832,7 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue last = head = new Node(null); // Read in all elements and place in queue - for (; ; ) { + for (;;) { @SuppressWarnings("unchecked") E item = (E) s.readObject(); if (item == null) { diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java index b80b246f..ecfdbacd 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java @@ -91,7 +91,7 @@ public class DynamicThreadPoolServiceLoader { try { return clazz.getDeclaredConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException | InvocationTargetException - | NoSuchMethodException e) { + | NoSuchMethodException e) { throw new ServiceLoaderInstantiationException(clazz, e); } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java index d1d30bf2..995209de 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java @@ -25,9 +25,9 @@ import java.text.DecimalFormat; public class ByteConvertUtil { public static final int KB_SIZE = 2 << 9; - + public static final int MB_SIZE = 2 << 19; - + public static final int GB_SIZE = 2 << 29; public static String getPrintSize(long size) { From eaf0fa16a75bacd03e8b38520c7fa6c24a199952 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Wed, 5 Oct 2022 17:36:29 +0800 Subject: [PATCH 14/30] Add code checking tool maven-checkstyle-plugin (#755) --- dev-support/hippo4j_checkstyle.xml | 130 ++++++++++++++++++ .../hippo4j_checkstyle_suppression.xml | 28 ++++ pom.xml | 61 ++++---- 3 files changed, 185 insertions(+), 34 deletions(-) create mode 100644 dev-support/hippo4j_checkstyle.xml create mode 100644 dev-support/hippo4j_checkstyle_suppression.xml diff --git a/dev-support/hippo4j_checkstyle.xml b/dev-support/hippo4j_checkstyle.xml new file mode 100644 index 00000000..c45a921f --- /dev/null +++ b/dev-support/hippo4j_checkstyle.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev-support/hippo4j_checkstyle_suppression.xml b/dev-support/hippo4j_checkstyle_suppression.xml new file mode 100644 index 00000000..ab55dae0 --- /dev/null +++ b/dev-support/hippo4j_checkstyle_suppression.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 66f1ba0b..0ab7d6c6 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,7 @@ ${revision} pom ${project.artifactId} + https://github.com/opengoofy/hippo4j Dynamic observable thread pool framework @@ -60,6 +61,7 @@ 1.8 true false + true false UTF-8 UTF-8 @@ -70,6 +72,7 @@ 3.0.2 3.0 2.22.1 + 3.1.0 @@ -81,104 +84,87 @@ pom import
- com.squareup.okhttp3 okhttp ${okhttp3.version} - cn.hutool hutool-all ${hutool-all.version} - org.apache.commons commons-lang3 ${commons-lang3.version} - cn.hippo4j hippo4j-message ${revision} - cn.hippo4j hippo4j-core ${revision} - cn.hippo4j hippo4j-adapter-base ${revision} - com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} - com.github.dozermapper dozer-core ${dozer.version} - com.google.guava guava ${guava.version} - com.aliyun alibaba-dingtalk-service-sdk ${dingtalk-sdk.version} - com.alibaba transmittable-thread-local ${transmittable-thread-local.version} - org.hibernate.validator hibernate-validator ${hibernate-validator.version} - org.slf4j slf4j-api ${slf4j-api.version} - ch.qos.logback logback-core ${logback.version} - ch.qos.logback logback-classic ${logback.version} - org.springframework.boot spring-boot-starter-json ${spring-boot.version} compile - io.netty netty-all @@ -297,21 +283,6 @@ ${maven.multiModuleProjectDirectory}/dev-support/license-header - - - UTF-8 - 4 - true - false - true - true - false - false - custom_1 - false - false - - @@ -322,11 +293,33 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + ${maven-checkstyle-plugin.version} + + ${maven.multiModuleProjectDirectory}/dev-support/hippo4j_checkstyle.xml + ${maven.multiModuleProjectDirectory}/dev-support/hippo4j_checkstyle_suppression.xml + + false + true + UTF-8 + ${skip.checkstyle.check} + error + + + + validate + validate + + checkstyle + + + + - https://github.com/opengoofy/hippo4j - The Apache Software License, Version 2.0 From b5810ce296a8bd649496c191d2cf0ac59ecdfc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=E5=93=A5?= Date: Wed, 5 Oct 2022 17:42:20 +0800 Subject: [PATCH 15/30] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1190e364..2084e0da 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 提供以下功能支持: -- 全局管控 - 管理应用线程池实例; +- 全局管控 - 管理应用线程池实例。 - 动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等。 - 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长。 @@ -36,7 +36,7 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 - 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务。 - 多种模式 - 内置两种使用模式:[依赖配置中心](https://hippo4j.cn/docs/user_docs/getting_started/config/hippo4j-config-start) 和 [无中间件依赖](https://hippo4j.cn/docs/user_docs/getting_started/server/hippo4j-server-start)。 - 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更。 -- 中间件适配 - Dubbo、Hystrix、RocketMQ、RabbitMQ 等消费线程池运行时数据查看和线程数变更。 +- 中间件适配 - Dubbo、Hystrix、Polaris、RabbitMQ、RocketMQ 等消费线程池运行时数据查看和线程数变更。 ## 快速开始 From 956bd20d6c5121d00ddbaa3748ed27855f371bb8 Mon Sep 17 00:00:00 2001 From: Lijx Date: Thu, 6 Oct 2022 00:03:24 +0800 Subject: [PATCH 16/30] Globally remove the Guava toolkit dependency (#759) * Globally remove the Guava toolkit dependency * update "Globally remove the Guava toolkit dependency" --- .../dubbo/AlibabaDubboThreadPoolAdapter.java | 4 +- .../base/ThreadPoolAdapterBeanContainer.java | 4 +- .../adapter/dubbo/DubboThreadPoolAdapter.java | 4 +- .../hystrix/HystrixThreadPoolAdapter.java | 9 +- .../hystrix/ThreadPoolAdapterScheduler.java | 4 +- .../rabbitmq/RabbitMQThreadPoolAdapter.java | 10 +-- .../rocketmq/RocketMQThreadPoolAdapter.java | 9 +- ...gCloudStreamRabbitMQThreadPoolAdapter.java | 11 +-- ...gCloudStreamRocketMQThreadPoolAdapter.java | 11 +-- hippo4j-common/pom.xml | 10 +-- .../common/toolkit/CollectionUtil.java | 44 ++++++++- .../cn/hippo4j/common/toolkit/Joiner.java | 90 +++++++++++++++++++ .../cn/hippo4j/common/toolkit/StringUtil.java | 1 + .../hippo4j/common/toolkit/ArrayUtilTest.java | 8 +- .../common/toolkit/CollectionUtilTest.java | 6 +- .../hippo4j/common/toolkit/GroupKeyTest.java | 6 -- hippo4j-config/pom.xml | 6 ++ .../monitor/QueryMonitorExecuteChoose.java | 4 +- .../config/service/ConfigCacheService.java | 16 ++-- .../config/service/ConfigServletInner.java | 6 +- .../config/service/LongPollingService.java | 4 +- .../service/ThreadPoolAdapterService.java | 15 ++-- .../service/biz/impl/ConfigServiceImpl.java | 9 +- .../biz/impl/HisRunDataServiceImpl.java | 22 ++--- .../service/biz/impl/NotifyServiceImpl.java | 8 +- .../cn/hippo4j/config/toolkit/MapUtil.java | 4 +- .../hippo4j/config/toolkit/BeanUtilTest.java | 9 +- .../hippo4j/config/toolkit/MapUtilTest.java | 11 ++- .../config/toolkit/Md5ConfigUtilTest.java | 3 +- .../controller/ThreadPoolController.java | 10 +-- .../service/impl/DashboardServiceImpl.java | 22 ++--- .../manage/GlobalThreadPoolManage.java | 4 +- .../cn/hippo4j/core/toolkit/IdentifyUtil.java | 6 +- hippo4j-discovery/pom.xml | 5 -- .../discovery/core/BaseInstanceRegistry.java | 11 ++- hippo4j-message/pom.xml | 5 -- .../platform/DingSendMessageHandler.java | 6 +- .../base/AbstractRobotSendMessageHandler.java | 2 +- .../message/service/AlarmControlHandler.java | 13 +-- .../Hippo4jBaseSendMessageService.java | 8 +- .../cn/hippo4j/monitor/es/EsClientHolder.java | 11 ++- .../micrometer/MicrometerMonitorHandler.java | 10 +-- .../server/init/LocalDataSourceLoader.java | 4 +- .../DynamicThreadPoolMonitorExecutor.java | 6 +- .../notify/CoreNotifyConfigBuilder.java | 18 ++-- .../starter/parser/ConfigParserHandler.java | 9 +- .../parser/PropertiesConfigParser.java | 4 +- .../starter/parser/YamlConfigParser.java | 10 +-- .../refresher/ApolloRefresherHandler.java | 4 +- .../BootstrapConfigPropertiesBinderAdapt.java | 16 ++-- .../refresher/PolarisRefresherHandler.java | 11 ++- .../refresher/ZookeeperRefresherHandler.java | 4 +- .../DynamicThreadPoolRefreshListener.java | 9 +- .../DynamicThreadPoolAdapterRegister.java | 6 +- .../support/GlobalCoreThreadPoolManage.java | 4 +- .../core/ThreadPoolAdapterRegister.java | 4 +- .../monitor/ReportingEventExecutor.java | 8 +- .../monitor/collect/RunTimeInfoCollector.java | 6 +- .../notify/ServerNotifyConfigBuilder.java | 14 +-- .../starter/remote/ServerHttpAgent.java | 6 +- .../DynamicThreadPoolConfigService.java | 5 +- pom.xml | 7 ++ 62 files changed, 354 insertions(+), 262 deletions(-) create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java diff --git a/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java index 216fab25..fed0f6ad 100644 --- a/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java @@ -22,12 +22,12 @@ import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; import cn.hippo4j.adapter.base.ThreadPoolAdapterState; import com.alibaba.dubbo.common.extension.ExtensionLoader; import com.alibaba.dubbo.common.store.DataStore; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; @@ -41,7 +41,7 @@ import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMI @Slf4j public class AlibabaDubboThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { - private final Map DUBBO_PROTOCOL_EXECUTOR = Maps.newHashMap(); + private final Map DUBBO_PROTOCOL_EXECUTOR = new HashMap<>(); @Override public String mark() { diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java index 0688192d..92d555f2 100644 --- a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java @@ -18,10 +18,10 @@ package cn.hippo4j.adapter.base; import cn.hippo4j.common.config.ApplicationContextHolder; -import com.google.common.collect.Maps; import org.springframework.beans.factory.InitializingBean; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Thread-pool adapter bean container. @@ -31,7 +31,7 @@ public class ThreadPoolAdapterBeanContainer implements InitializingBean { /** * Store three-party thread pool framework bean instances. */ - public static final Map THREAD_POOL_ADAPTER_BEAN_CONTAINER = Maps.newConcurrentMap(); + public static final Map THREAD_POOL_ADAPTER_BEAN_CONTAINER = new ConcurrentHashMap<>(); @Override public void afterPropertiesSet() throws Exception { diff --git a/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java index dfbaeb33..f11d8ee1 100644 --- a/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java @@ -21,7 +21,6 @@ import cn.hippo4j.adapter.base.ThreadPoolAdapter; import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; import cn.hippo4j.adapter.base.ThreadPoolAdapterState; import cn.hippo4j.common.toolkit.ReflectUtil; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.Version; import org.apache.dubbo.common.extension.ExtensionLoader; @@ -31,6 +30,7 @@ import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentMap; @@ -45,7 +45,7 @@ import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMI @Slf4j public class DubboThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { - private final Map DUBBO_PROTOCOL_EXECUTOR = Maps.newHashMap(); + private final Map DUBBO_PROTOCOL_EXECUTOR = new HashMap<>(); @Override public String mark() { diff --git a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java index 34e01088..ef5002f7 100644 --- a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java @@ -20,8 +20,6 @@ package cn.hippo4j.adapter.hystrix; import cn.hippo4j.adapter.base.*; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.CollectionUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.netflix.hystrix.HystrixThreadPool; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationStartedEvent; @@ -29,6 +27,7 @@ import org.springframework.context.ApplicationListener; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -49,7 +48,7 @@ public class HystrixThreadPoolAdapter implements ThreadPoolAdapter, ApplicationL private static final String THREAD_POOLS_FIELD = "threadPools"; - private final Map HYSTRIX_CONSUME_EXECUTOR = Maps.newHashMap(); + private final Map HYSTRIX_CONSUME_EXECUTOR = new HashMap<>(); private ThreadPoolAdapterScheduler threadPoolAdapterScheduler; @@ -112,7 +111,7 @@ public class HystrixThreadPoolAdapter implements ThreadPoolAdapter, ApplicationL // Periodically refresh registration. ThreadPoolAdapterRegisterAction threadPoolAdapterRegisterAction = ApplicationContextHolder.getBean(ThreadPoolAdapterRegisterAction.class); Map beansOfType = ApplicationContextHolder.getBeansOfType(this.getClass()); - Map map = Maps.newHashMap(beansOfType); + Map map = new HashMap<>(beansOfType); ThreadPoolAdapterRegisterTask threadPoolAdapterRegisterTask = new ThreadPoolAdapterRegisterTask(scheduler, taskIntervalSeconds, map, threadPoolAdapterRegisterAction); scheduler.schedule(threadPoolAdapterRegisterTask, threadPoolAdapterScheduler.getTaskIntervalSeconds(), TimeUnit.SECONDS); } @@ -207,7 +206,7 @@ public class HystrixThreadPoolAdapter implements ThreadPoolAdapter, ApplicationL ThreadPoolAdapterRegisterAction threadPoolAdapterRegisterAction; - private List cacheConfigList = Lists.newArrayList(); + private List cacheConfigList = new ArrayList<>(); public ThreadPoolAdapterRegisterTask(ScheduledExecutorService scheduler, int taskIntervalSeconds, Map threadPoolAdapterMap, diff --git a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java index c3063b7e..41f5db22 100644 --- a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java +++ b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java @@ -17,7 +17,7 @@ package cn.hippo4j.adapter.hystrix; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import cn.hutool.core.thread.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ScheduledExecutorService; @@ -36,7 +36,7 @@ public class ThreadPoolAdapterScheduler { public ThreadPoolAdapterScheduler() { scheduler = new ScheduledThreadPoolExecutor(2, new ThreadFactoryBuilder() - .setNameFormat("threadPoolAdapter") + .setNamePrefix("threadPoolAdapter") .setDaemon(true) .build()); } diff --git a/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java index ba7521a8..ccaab2b1 100644 --- a/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java @@ -21,17 +21,13 @@ import cn.hippo4j.adapter.base.ThreadPoolAdapter; import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; import cn.hippo4j.adapter.base.ThreadPoolAdapterState; import cn.hippo4j.common.toolkit.ReflectUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; @@ -50,7 +46,7 @@ public class RabbitMQThreadPoolAdapter implements ThreadPoolAdapter, Application private final Map abstractConnectionFactoryMap; - private final Map RABBITMQ_THREAD_POOL_TASK_EXECUTOR = Maps.newHashMap(); + private final Map RABBITMQ_THREAD_POOL_TASK_EXECUTOR = new HashMap<>(); @Override public String mark() { @@ -71,7 +67,7 @@ public class RabbitMQThreadPoolAdapter implements ThreadPoolAdapter, Application @Override public List getThreadPoolStates() { - List adapterStateList = Lists.newArrayList(); + List adapterStateList = new ArrayList<>(); RABBITMQ_THREAD_POOL_TASK_EXECUTOR.forEach( (key, val) -> adapterStateList.add(getThreadPoolState(key))); return adapterStateList; diff --git a/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java index d1f7b093..88e2a869 100644 --- a/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java @@ -22,14 +22,15 @@ import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; import cn.hippo4j.adapter.base.ThreadPoolAdapterState; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.ReflectUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.impl.consumer.ConsumeMessageService; import org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; + +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ThreadPoolExecutor; @@ -42,7 +43,7 @@ import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMI @Slf4j public class RocketMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { - private final Map ROCKET_MQ_CONSUME_EXECUTOR = Maps.newHashMap(); + private final Map ROCKET_MQ_CONSUME_EXECUTOR = new HashMap<>(); @Override public String mark() { @@ -65,7 +66,7 @@ public class RocketMQThreadPoolAdapter implements ThreadPoolAdapter, Application @Override public List getThreadPoolStates() { - List adapterStateList = Lists.newArrayList(); + List adapterStateList = new ArrayList<>(); ROCKET_MQ_CONSUME_EXECUTOR.forEach( (key, val) -> adapterStateList.add(getThreadPoolState(key))); return adapterStateList; diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.java index ca71513b..cb04cf6b 100644 --- a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.java @@ -23,8 +23,6 @@ import cn.hippo4j.adapter.base.ThreadPoolAdapterState; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.ReflectUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer; import org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer; @@ -36,10 +34,7 @@ import org.springframework.cloud.stream.binding.InputBindingLifecycle; import org.springframework.context.ApplicationListener; import org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; @@ -49,7 +44,7 @@ import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMI @Slf4j public class SpringCloudStreamRabbitMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { - private final Map ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR = Maps.newHashMap(); + private final Map ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR = new HashMap<>(); @Override public String mark() { @@ -84,7 +79,7 @@ public class SpringCloudStreamRabbitMQThreadPoolAdapter implements ThreadPoolAda @Override public List getThreadPoolStates() { - List adapterStateList = Lists.newArrayList(); + List adapterStateList = new ArrayList<>(); ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.forEach( (key, val) -> adapterStateList.add(getThreadPoolState(key))); return adapterStateList; diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java index 926f0ee8..b71d7aac 100644 --- a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java @@ -25,8 +25,6 @@ import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.ReflectUtil; import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer; import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQInboundChannelAdapter; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService; @@ -37,10 +35,7 @@ import org.springframework.cloud.stream.binder.DefaultBinding; import org.springframework.cloud.stream.binding.InputBindingLifecycle; import org.springframework.context.ApplicationListener; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.concurrent.ThreadPoolExecutor; import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; @@ -51,7 +46,7 @@ import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMI @Slf4j public class SpringCloudStreamRocketMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { - private final Map ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR = Maps.newHashMap(); + private final Map ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR = new HashMap<>(); @Override public String mark() { @@ -74,7 +69,7 @@ public class SpringCloudStreamRocketMQThreadPoolAdapter implements ThreadPoolAda @Override public List getThreadPoolStates() { - List adapterStateList = Lists.newArrayList(); + List adapterStateList = new ArrayList<>(); ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.forEach( (key, val) -> adapterStateList.add(getThreadPoolState(key))); return adapterStateList; diff --git a/hippo4j-common/pom.xml b/hippo4j-common/pom.xml index 7b6c6fec..44b46e4d 100644 --- a/hippo4j-common/pom.xml +++ b/hippo4j-common/pom.xml @@ -61,11 +61,6 @@ spring-boot-starter-json - - com.google.guava - guava - - cn.hutool hutool-all @@ -76,6 +71,11 @@ spring-boot-starter-test test + + + com.github.ben-manes.caffeine + caffeine + diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java index 139fa7d3..c57a1db1 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java @@ -17,10 +17,7 @@ package cn.hippo4j.common.toolkit; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Collection util. @@ -123,4 +120,43 @@ public class CollectionUtil { public static boolean isNotEmpty(Collection collection) { return !isEmpty(collection); } + + /** + * reference google guava + * + * @param elements + * @return + */ + @SafeVarargs + public static ArrayList newArrayList(E... elements) { + Objects.requireNonNull(elements);// for GWT + // Avoid integer overflow when a large array is passed in + int capacity = computeArrayListCapacity(elements.length); + ArrayList list = new ArrayList<>(capacity); + Collections.addAll(list, elements); + return list; + } + + private static int computeArrayListCapacity(int arraySize) { + checkNonnegative(arraySize); + + // TODO(kevinb): Figure out the right behavior, and document it + return saturatedCast(5L + arraySize + (arraySize / 10)); + } + + private static void checkNonnegative(int value) { + if (value < 0) { + throw new IllegalArgumentException("arraySize cannot be negative but was: " + value); + } + } + + private static int saturatedCast(long value) { + if (value > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } + if (value < Integer.MIN_VALUE) { + return Integer.MIN_VALUE; + } + return (int) value; + } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java new file mode 100644 index 00000000..70dd23fa --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.common.toolkit; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.Objects; + +/** + * reference google guava + * + */ +public class Joiner { + + private final String separator; + + private Joiner(String separator) { + this.separator = Objects.requireNonNull(separator); + } + + /** Returns a joiner which automatically places {@code separator} between consecutive elements. */ + public static Joiner on(String separator) { + return new Joiner(separator); + } + + /** + * Returns a string containing the string representation of each of {@code parts}, using the + * previously configured separator between each. + * + */ + public final String join(Object[] parts) { + return join(Arrays.asList(parts)); + } + + public final String join(Iterable parts) { + return join(parts.iterator()); + } + + /** + * Returns a string containing the string representation of each of {@code parts}, using the + * previously configured separator between each. + * + */ + public final String join(Iterator parts) { + return appendTo(new StringBuilder(), parts).toString(); + } + + public final StringBuilder appendTo(StringBuilder builder, Iterator parts) { + try { + appendTo((Appendable) builder, parts); + } catch (IOException impossible) { + throw new AssertionError(impossible); + } + return builder; + } + + public A appendTo(A appendable, Iterator parts) throws IOException { + Objects.requireNonNull(appendable); + if (parts.hasNext()) { + appendable.append(toString(parts.next())); + while (parts.hasNext()) { + appendable.append(separator); + appendable.append(toString(parts.next())); + } + } + return appendable; + } + + CharSequence toString(Object part) { + Objects.requireNonNull(part); + return (part instanceof CharSequence) ? (CharSequence) part : part.toString(); + } + +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java index d843f5e7..74cccf9d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java @@ -191,4 +191,5 @@ public class StringUtil { } return sb.toString(); } + } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.java index 3a314c4d..1505d9ac 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.java @@ -18,8 +18,8 @@ package cn.hippo4j.common.toolkit; import cn.hippo4j.common.function.Matcher; -import com.google.common.base.Strings; import org.junit.Test; +import org.springframework.util.StringUtils; public class ArrayUtilTest { @@ -39,11 +39,11 @@ public class ArrayUtilTest { public void assertFirstMatch() { Matcher matcher = (str) -> "1".equalsIgnoreCase(str); String[] array = new String[0]; - Assert.isTrue(Strings.isNullOrEmpty(ArrayUtil.firstMatch(matcher, array))); + Assert.isTrue(StringUtils.isEmpty(ArrayUtil.firstMatch(matcher, array))); array = new String[]{"0"}; - Assert.isTrue(Strings.isNullOrEmpty(ArrayUtil.firstMatch(matcher, array))); + Assert.isTrue(StringUtils.isEmpty(ArrayUtil.firstMatch(matcher, array))); array = new String[]{"1"}; - Assert.isTrue(!Strings.isNullOrEmpty(ArrayUtil.firstMatch(matcher, array))); + Assert.isTrue(!StringUtils.isEmpty(ArrayUtil.firstMatch(matcher, array))); } @Test diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java index 78715122..04e011dd 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java @@ -17,10 +17,10 @@ package cn.hippo4j.common.toolkit; -import com.google.common.collect.Maps; import org.assertj.core.util.Lists; import org.junit.Test; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -44,7 +44,7 @@ public class CollectionUtilTest { Assert.isTrue(!CollectionUtil.isEmpty(list)); Map map = null; Assert.isTrue(CollectionUtil.isEmpty(map)); - map = Maps.newHashMap(); + map = new HashMap<>(); Assert.isTrue(CollectionUtil.isEmpty(map)); map.put("key", "value"); Assert.isTrue(!CollectionUtil.isEmpty(map)); @@ -66,7 +66,7 @@ public class CollectionUtilTest { Assert.isTrue(CollectionUtil.isNotEmpty(list)); Map map = null; Assert.isTrue(!CollectionUtil.isNotEmpty(map)); - map = Maps.newHashMap(); + map = new HashMap<>(); Assert.isTrue(!CollectionUtil.isNotEmpty(map)); map.put("key", "value"); Assert.isTrue(CollectionUtil.isNotEmpty(map)); diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/GroupKeyTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/GroupKeyTest.java index b512704a..6d6c4009 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/GroupKeyTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/GroupKeyTest.java @@ -17,14 +17,8 @@ package cn.hippo4j.common.toolkit; -import org.checkerframework.checker.units.qual.A; import org.junit.Test; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.*; - public class GroupKeyTest { @Test diff --git a/hippo4j-config/pom.xml b/hippo4j-config/pom.xml index 61cd12de..c145134f 100644 --- a/hippo4j-config/pom.xml +++ b/hippo4j-config/pom.xml @@ -15,6 +15,12 @@ + + cn.hippo4j + hippo4j-common + ${revision} + + org.springframework.boot spring-boot-starter diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java index 5aedb340..2dfd9a6b 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java @@ -20,10 +20,10 @@ package cn.hippo4j.config.monitor; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.monitor.Message; import cn.hippo4j.common.monitor.MessageTypeEnum; -import com.google.common.collect.Maps; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.Map; /** @@ -35,7 +35,7 @@ public class QueryMonitorExecuteChoose implements CommandLineRunner { /** * Storage monitoring data execution container. */ - private Map monitorDataExecuteStrategyChooseMap = Maps.newHashMap(); + private Map monitorDataExecuteStrategyChooseMap = new HashMap<>(); /** * Choose by {@link cn.hippo4j.common.monitor.MessageTypeEnum}. diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java index 194e1811..3d154c72 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java @@ -24,6 +24,7 @@ import cn.hippo4j.common.design.observer.Observer; import cn.hippo4j.common.design.observer.ObserverMessage; import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.Joiner; import cn.hippo4j.common.toolkit.Md5Util; import cn.hippo4j.config.event.LocalDataChangeEvent; import cn.hippo4j.config.model.CacheItem; @@ -33,9 +34,6 @@ import cn.hippo4j.config.service.biz.ConfigService; import cn.hippo4j.config.toolkit.MapUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.base.Joiner; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; @@ -79,7 +77,7 @@ public class ConfigCacheService { * @return */ private synchronized static String getContentMd5IsNullPut(String groupKey, String clientIdentify) { - Map cacheItemMap = Optional.ofNullable(CLIENT_CONFIG_CACHE.get(groupKey)).orElse(Maps.newHashMap()); + Map cacheItemMap = Optional.ofNullable(CLIENT_CONFIG_CACHE.get(groupKey)).orElse(new HashMap<>()); CacheItem cacheItem = null; if (CollUtil.isNotEmpty(cacheItemMap) && (cacheItem = cacheItemMap.get(clientIdentify)) != null) { return cacheItem.md5; @@ -129,7 +127,7 @@ public class ConfigCacheService { return item; } CacheItem tmp = new CacheItem(groupKey); - Map cacheItemMap = Maps.newHashMap(); + Map cacheItemMap = new HashMap<>(); cacheItemMap.put(ip, tmp); CLIENT_CONFIG_CACHE.putIfAbsent(groupKey, cacheItemMap); return tmp; @@ -137,7 +135,7 @@ public class ConfigCacheService { public static Map getContent(String identification) { List identificationList = MapUtil.parseMapForFilter(CLIENT_CONFIG_CACHE, identification); - Map returnStrCacheItemMap = Maps.newHashMap(); + Map returnStrCacheItemMap = new HashMap<>(); identificationList.forEach(each -> returnStrCacheItemMap.putAll(CLIENT_CONFIG_CACHE.get(each))); return returnStrCacheItemMap; } @@ -150,13 +148,13 @@ public class ConfigCacheService { public static List getIdentifyList(String tenantId, String itemId, String threadPoolId) { List identifyList = null; - String buildKey = Joiner.on(GROUP_KEY_DELIMITER).join(Lists.newArrayList(threadPoolId, itemId, tenantId)); + String buildKey = Joiner.on(GROUP_KEY_DELIMITER).join(CollectionUtil.newArrayList(threadPoolId, itemId, tenantId)); List keys = MapUtil.parseMapForFilter(CLIENT_CONFIG_CACHE, buildKey); if (CollectionUtil.isNotEmpty(keys)) { - identifyList = new ArrayList(keys.size()); + identifyList = new ArrayList<>(keys.size()); for (String each : keys) { String[] keyArray = each.split(GROUP_KEY_DELIMITER_TRANSLATION); - if (keyArray != null && keyArray.length > 2) { + if (keyArray.length > 2) { identifyList.add(keyArray[3]); } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java index bbe8ee51..48457554 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java @@ -17,8 +17,8 @@ package cn.hippo4j.config.service; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -39,7 +39,7 @@ public class ConfigServletInner { @NonNull private final LongPollingService longPollingService; - private final Cache deWeightCache = CacheBuilder.newBuilder() + private final Cache deWeightCache = Caffeine.newBuilder() .maximumSize(1024) .build(); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java index 918e6a3c..c56a9242 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java @@ -17,6 +17,7 @@ package cn.hippo4j.config.service; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.Md5Util; import cn.hippo4j.common.web.base.Results; @@ -30,7 +31,6 @@ import cn.hippo4j.config.toolkit.Md5ConfigUtil; import cn.hippo4j.config.toolkit.RequestUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Lists; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -117,7 +117,7 @@ public class LongPollingService { for (Iterator iter = allSubs.iterator(); iter.hasNext();) { ClientLongPolling clientSub = iter.next(); String identity = groupKey + GROUP_KEY_DELIMITER + identify; - List parseMapForFilter = Lists.newArrayList(identity); + List parseMapForFilter = CollectionUtil.newArrayList(identity); if (StrUtil.isBlank(identify)) { parseMapForFilter = MapUtil.parseMapForFilter(clientSub.clientMd5Map, groupKey); } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java index d27c04e8..4744a3ee 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java @@ -31,12 +31,11 @@ import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterRespDTO; import cn.hutool.core.text.StrBuilder; import cn.hutool.http.HttpUtil; import com.fasterxml.jackson.core.type.TypeReference; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import static cn.hippo4j.common.constant.Constants.HTTP_EXECUTE_TIMEOUT; @@ -52,7 +51,7 @@ public class ThreadPoolAdapterService { /** * Map>>> */ - private static final Map>>> THREAD_POOL_ADAPTER_MAP = Maps.newConcurrentMap(); + private static final Map>>> THREAD_POOL_ADAPTER_MAP = new ConcurrentHashMap<>(); static { AbstractSubjectCenter.register(AbstractSubjectCenter.SubjectType.CLEAR_CONFIG_CACHE, new ClearThreadPoolAdapterCache()); @@ -64,19 +63,19 @@ public class ThreadPoolAdapterService { String mark = each.getMark(); Map>> actual = THREAD_POOL_ADAPTER_MAP.get(mark); if (CollectionUtil.isEmpty(actual)) { - actual = Maps.newHashMap(); + actual = new HashMap<>(); THREAD_POOL_ADAPTER_MAP.put(mark, actual); } Map> tenantItemMap = actual.get(each.getTenantItemKey()); if (CollectionUtil.isEmpty(tenantItemMap)) { - tenantItemMap = Maps.newHashMap(); + tenantItemMap = new HashMap<>(); actual.put(each.getTenantItemKey(), tenantItemMap); } List threadPoolAdapterStates = each.getThreadPoolAdapterStates(); for (ThreadPoolAdapterState adapterState : threadPoolAdapterStates) { List adapterStateList = tenantItemMap.get(adapterState.getThreadPoolKey()); if (CollectionUtil.isEmpty(adapterStateList)) { - adapterStateList = Lists.newArrayList(); + adapterStateList = new ArrayList<>(); tenantItemMap.put(adapterState.getThreadPoolKey(), adapterStateList); } Optional first = adapterStateList.stream().filter(state -> Objects.equals(state.getClientAddress(), each.getClientAddress())).findFirst(); @@ -95,12 +94,12 @@ public class ThreadPoolAdapterService { List actual = Optional.ofNullable(THREAD_POOL_ADAPTER_MAP.get(requestParameter.getMark())) .map(each -> each.get(requestParameter.getTenant() + IDENTIFY_SLICER_SYMBOL + requestParameter.getItem())) .map(each -> each.get(requestParameter.getThreadPoolKey())) - .orElse(Lists.newArrayList()); + .orElse(new ArrayList<>()); List addressList = actual.stream().map(ThreadPoolAdapterState::getClientAddress).collect(Collectors.toList()); List result = new ArrayList<>(addressList.size()); addressList.forEach(each -> { String urlString = StrBuilder.create("http://", each, "/adapter/thread-pool/info").toString(); - Map param = Maps.newHashMap(); + Map param = new HashMap<>(); param.put("mark", requestParameter.getMark()); param.put("threadPoolKey", requestParameter.getThreadPoolKey()); try { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java index 5162b11b..14bd700c 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java @@ -27,7 +27,10 @@ import cn.hippo4j.common.web.exception.ServiceException; import cn.hippo4j.config.event.LocalDataChangeEvent; import cn.hippo4j.config.mapper.ConfigInfoMapper; import cn.hippo4j.config.mapper.ConfigInstanceMapper; -import cn.hippo4j.config.model.*; +import cn.hippo4j.config.model.ConfigAllInfo; +import cn.hippo4j.config.model.ConfigInfoBase; +import cn.hippo4j.config.model.ConfigInstanceInfo; +import cn.hippo4j.config.model.LogRecordInfo; import cn.hippo4j.config.model.biz.notify.NotifyReqDTO; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.ConfigChangePublisher; @@ -38,7 +41,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -152,7 +154,8 @@ public class ConfigServiceImpl implements ConfigService { } DynamicThreadPoolRegisterServerNotifyParameter serverNotifyParameter = registerWrapper.getDynamicThreadPoolRegisterServerNotifyParameter(); if (serverNotifyParameter != null) { - ArrayList notifyTypes = Lists.newArrayList("CONFIG", "ALARM"); + ArrayList notifyTypes = new ArrayList<>(); + Collections.addAll(notifyTypes, "CONFIG", "ALARM"); notifyTypes.forEach(each -> { NotifyReqDTO notifyReqDTO = new NotifyReqDTO(); notifyReqDTO.setType(each) diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java index 0466070a..a22eb9ed 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java @@ -36,12 +36,12 @@ import cn.hippo4j.config.toolkit.BeanUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -90,15 +90,15 @@ public class HisRunDataServiceImpl extends ServiceImpl times = Lists.newArrayList(); - List poolSizeList = Lists.newArrayList(); - List activeSizeList = Lists.newArrayList(); - List queueCapacityList = Lists.newArrayList(); - List queueSizeList = Lists.newArrayList(); - List completedTaskCountList = Lists.newArrayList(); - List rejectCountList = Lists.newArrayList(); - List queueRemainingCapacityList = Lists.newArrayList(); - List currentLoadList = Lists.newArrayList(); + List times = new ArrayList<>(); + List poolSizeList = new ArrayList<>(); + List activeSizeList = new ArrayList<>(); + List queueCapacityList = new ArrayList<>(); + List queueSizeList = new ArrayList<>(); + List completedTaskCountList = new ArrayList<>(); + List rejectCountList = new ArrayList<>(); + List queueRemainingCapacityList = new ArrayList<>(); + List currentLoadList = new ArrayList<>(); long countTemp = 0L; AtomicBoolean firstFlag = new AtomicBoolean(Boolean.TRUE); for (HisRunDataInfo each : hisRunDataInfos) { @@ -146,7 +146,7 @@ public class HisRunDataServiceImpl extends ServiceImpl runtimeMessages = message.getMessages(); - List hisRunDataInfos = Lists.newArrayList(); + List hisRunDataInfos = new ArrayList<>(); runtimeMessages.forEach(each -> { HisRunDataInfo hisRunDataInfo = BeanUtil.convert(each, HisRunDataInfo.class); String[] parseKey = GroupKey.parseKey(each.getGroupKey()); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java index 0a597c5d..f87a1aab 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java @@ -18,6 +18,7 @@ package cn.hippo4j.config.service.biz.impl; import cn.hippo4j.common.enums.EnableEnum; +import cn.hippo4j.common.toolkit.BooleanUtil; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.common.web.exception.ServiceException; import cn.hippo4j.config.mapper.NotifyInfoMapper; @@ -29,17 +30,16 @@ import cn.hippo4j.config.model.biz.notify.NotifyRespDTO; import cn.hippo4j.config.service.biz.NotifyService; import cn.hippo4j.config.toolkit.BeanUtil; import cn.hutool.core.collection.CollUtil; -import cn.hippo4j.common.toolkit.BooleanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -54,7 +54,7 @@ public class NotifyServiceImpl implements NotifyService { @Override public List listNotifyConfig(NotifyQueryReqDTO reqDTO) { - List notifyListRespList = Lists.newArrayList(); + List notifyListRespList = new ArrayList<>(); reqDTO.getGroupKeys().forEach(each -> { String[] parseKey = GroupKey.parseKey(each); List notifyInfos = listNotifyCommon("CONFIG", parseKey); @@ -93,7 +93,7 @@ public class NotifyServiceImpl implements NotifyService { if (BooleanUtil.isTrue(requestParam.getAlarmType())) { existNotify("ALARM", requestParam); } - List notifyInfos = Lists.newArrayList(); + List notifyInfos = new ArrayList<>(); if (BooleanUtil.isTrue(requestParam.getAlarmType())) { NotifyInfo alarmNotifyInfo = BeanUtil.convert(requestParam, NotifyInfo.class); alarmNotifyInfo.setType("ALARM"); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java index 0df8bdac..613ec640 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java @@ -18,8 +18,8 @@ package cn.hippo4j.config.toolkit; import cn.hutool.core.collection.CollUtil; -import com.google.common.collect.Lists; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -53,7 +53,7 @@ public class MapUtil { * @return */ public static List parseMapForFilter(Map sourceMap, String filters) { - List resultList = Lists.newArrayList(); + List resultList = new ArrayList<>(); if (CollUtil.isEmpty(sourceMap)) { return resultList; } diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java index 7f44fa32..2c393a03 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java @@ -19,9 +19,6 @@ package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.Assert; import com.github.dozermapper.core.converters.ConversionException; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import lombok.*; import org.junit.Test; @@ -50,7 +47,7 @@ public class BeanUtilTest { @Test public void mapToBeanConvertTest() { // 测试MapToBean - final HashMap map = Maps.newHashMap(); + final HashMap map = new HashMap<>(); map.put("name", "Hippo4j"); map.put("age", 1); map.put("address", "hippo4j.cn"); @@ -64,7 +61,7 @@ public class BeanUtilTest { @Test public void ListToListConvertTest() { - final List list = Lists.newArrayList(); + final List list = new ArrayList<>(); list.add(Person.builder().name("one").age(1).build()); list.add(Person.builder().name("two").age(2).build()); list.add(Person.builder().name("three").age(3).build()); @@ -75,7 +72,7 @@ public class BeanUtilTest { @Test public void SetToSetConvertTest() { - final Set sets = Sets.newHashSet(); + final Set sets = new HashSet<>(); sets.add(Person.builder().name("one").age(1).build()); sets.add(Person.builder().name("two").age(2).build()); sets.add(Person.builder().name("three").age(3).build()); diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java index e67f3910..58980692 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java @@ -19,7 +19,6 @@ package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.Assert; import cn.hutool.core.collection.CollectionUtil; -import com.google.common.collect.ImmutableMap; import org.junit.Test; import java.util.HashMap; @@ -35,14 +34,20 @@ public class MapUtilTest { @Test public void parseMapForFilterRetIsEmptyTest() { - Map map = ImmutableMap.of("abc", "123", "bcd", "456", "cde", "789"); + HashMap map = new HashMap<>(); + map.put("abc", "123"); + map.put("bcd", "456"); + map.put("cde", "789"); List ret = MapUtil.parseMapForFilter(map, "x"); Assert.isTrue(CollectionUtil.isEmpty(ret)); } @Test public void parseMapForFilterRetIsNotEmptyTest() { - Map map = ImmutableMap.of("abc", "123", "bcd", "456", "cde", "789"); + HashMap map = new HashMap<>(); + map.put("abc", "123"); + map.put("bcd", "456"); + map.put("cde", "789"); List ret = MapUtil.parseMapForFilter(map, "b"); Assert.isTrue(CollectionUtil.isNotEmpty(ret)); } diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java index 28e7ebb8..5bfd5055 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java @@ -24,6 +24,7 @@ import org.assertj.core.util.Lists; import org.junit.Test; import java.io.IOException; +import java.util.ArrayList; import java.util.Objects; /** @@ -62,7 +63,7 @@ public class Md5ConfigUtilTest { public void compareMd5ResultStringEmptyTest() { String key = null; try { - key = Md5ConfigUtil.compareMd5ResultString(Lists.newArrayList()); + key = Md5ConfigUtil.compareMd5ResultString(new ArrayList<>()); } catch (IOException ignored) { } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java index 08153056..909ec0e8 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java @@ -42,11 +42,11 @@ import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -131,9 +131,9 @@ public class ThreadPoolController { List> leases = baseInstanceRegistry.listInstance(itemId); Lease first = CollUtil.getFirst(leases); if (first == null) { - return Results.success(Lists.newArrayList()); + return Results.success(new ArrayList<>()); } - List returnThreadPool = Lists.newArrayList(); + List returnThreadPool = new ArrayList<>(); for (Lease each : leases) { Result poolBaseState; try { @@ -185,7 +185,7 @@ public class ThreadPoolController { List> leases = baseInstanceRegistry.listInstance(itemId); Lease first = CollUtil.getFirst(leases); if (first == null) { - return Results.success(Lists.newArrayList()); + return Results.success(new ArrayList<>()); } InstanceInfo holder = first.getHolder(); String itemTenantKey = holder.getGroupKey(); @@ -197,7 +197,7 @@ public class ThreadPoolController { Map clientBasePathMap = leases.stream().map(each -> each.getHolder()) .filter(each -> StringUtil.isNotBlank(each.getClientBasePath())) .collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getClientBasePath)); - List returnThreadPool = Lists.newArrayList(); + List returnThreadPool = new ArrayList<>(); content.forEach((key, val) -> { ThreadPoolInstanceInfo threadPoolInstanceInfo = BeanUtil.convert(val.configAllInfo, ThreadPoolInstanceInfo.class); diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java b/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java index 09702b30..110a5589 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java @@ -19,6 +19,7 @@ package cn.hippo4j.console.service.impl; import cn.hippo4j.common.enums.DelEnum; import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.config.mapper.ConfigInfoMapper; import cn.hippo4j.config.mapper.HisRunDataMapper; @@ -36,7 +37,6 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -83,11 +83,11 @@ public class DashboardServiceImpl implements DashboardService { Date currentDate = new Date(); DateTime startTime = DateUtil.offsetMinute(currentDate, -10); List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolMaxRanking(startTime.getTime(), currentDate.getTime()); - List oneList = Lists.newArrayList(); - List twoList = Lists.newArrayList(); - List threeList = Lists.newArrayList(); - List fourList = Lists.newArrayList(); - ArrayList> lists = Lists.newArrayList(oneList, twoList, threeList, fourList); + List oneList = new ArrayList<>(); + List twoList = new ArrayList<>(); + List threeList = new ArrayList<>(); + List fourList = new ArrayList<>(); + ArrayList> lists = CollectionUtil.newArrayList(oneList, twoList, threeList, fourList); for (int i = 0; i < threadPoolTaskRankings.size(); i++) { List eachList = lists.get(i); HisRunDataMapper.ThreadPoolTaskRanking taskRanking = threadPoolTaskRankings.get(i); @@ -101,7 +101,7 @@ public class DashboardServiceImpl implements DashboardService { @Override public TenantChart getTenantChart() { - List> tenantChartList = Lists.newArrayList(); + List> tenantChartList = new ArrayList<>(); List tenantInfos = tenantInfoMapper.selectList(Wrappers.lambdaQuery(TenantInfo.class).eq(TenantInfo::getDelFlag, DelEnum.NORMAL.getIntCode())); for (TenantInfo tenant : tenantInfos) { int tenantThreadPoolNum = 0; @@ -118,7 +118,7 @@ public class DashboardServiceImpl implements DashboardService { Dict dict = Dict.create().set("name", tenant.getTenantId()).set("value", tenantThreadPoolNum); tenantChartList.add(dict); } - List resultTenantChartList = tenantChartList.stream() + List> resultTenantChartList = tenantChartList.stream() .sorted((one, two) -> (int) two.get("value") - (int) one.get("value")) .limit(5) .collect(Collectors.toList()); @@ -129,7 +129,7 @@ public class DashboardServiceImpl implements DashboardService { public PieChartInfo getPieChart() { LambdaQueryWrapper itemQueryWrapper = Wrappers.lambdaQuery(ItemInfo.class).eq(ItemInfo::getDelFlag, DelEnum.NORMAL.getIntCode()).select(ItemInfo::getItemId); List itemNameList = itemInfoMapper.selectObjs(itemQueryWrapper); - List> pieDataList = Lists.newArrayList(); + List> pieDataList = new ArrayList<>(); for (Object each : itemNameList) { LambdaQueryWrapper threadPoolQueryWrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) .eq(ConfigInfoBase::getItemId, each) @@ -141,7 +141,7 @@ public class DashboardServiceImpl implements DashboardService { } } pieDataList.sort((one, two) -> (int) two.get("value") - (int) one.get("value")); - List resultItemIds = Lists.newArrayList(); + List resultItemIds = new ArrayList<>(); List> resultPieDataList = pieDataList.stream() .limit(5) .map(each -> { @@ -156,7 +156,7 @@ public class DashboardServiceImpl implements DashboardService { public RankingChart getRankingChart() { Date currentDate = new Date(); DateTime tenTime = DateUtil.offsetMinute(currentDate, -10); - List resultList = Lists.newArrayList(); + List resultList = new ArrayList<>(); List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolTaskSumRanking(tenTime.getTime(), currentDate.getTime()); threadPoolTaskRankings.forEach(each -> { RankingChart.RankingChartInfo rankingChartInfo = new RankingChart.RankingChartInfo(); diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java index 1fa8672b..a3800b30 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java @@ -22,8 +22,8 @@ import cn.hippo4j.common.model.ThreadPoolParameter; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; import cn.hippo4j.core.executor.support.service.DynamicThreadPoolService; -import com.google.common.collect.Lists; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -123,7 +123,7 @@ public class GlobalThreadPoolManage { * @return */ public static List listThreadPoolId() { - return Lists.newArrayList(EXECUTOR_MAP.keySet()); + return new ArrayList<>(EXECUTOR_MAP.keySet()); } /** diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java index a01d4924..c4e18963 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java @@ -18,12 +18,12 @@ package cn.hippo4j.core.toolkit; import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.Joiner; import cn.hippo4j.common.toolkit.ThreadUtil; import cn.hippo4j.core.toolkit.inet.InetUtils; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.base.Joiner; -import com.google.common.collect.Lists; import org.springframework.core.env.ConfigurableEnvironment; import java.util.ArrayList; @@ -89,7 +89,7 @@ public class IdentifyUtil { * @return */ public static String getThreadPoolIdentify(String threadPoolId, String itemId, String namespace) { - ArrayList params = Lists.newArrayList(threadPoolId, itemId, namespace, getIdentify()); + ArrayList params = CollectionUtil.newArrayList(threadPoolId, itemId, namespace, getIdentify()); return Joiner.on(GROUP_KEY_DELIMITER).join(params); } } diff --git a/hippo4j-discovery/pom.xml b/hippo4j-discovery/pom.xml index 59a84cff..e1ceab7b 100644 --- a/hippo4j-discovery/pom.xml +++ b/hippo4j-discovery/pom.xml @@ -29,11 +29,6 @@ hippo4j-common ${revision} - - - com.google.guava - guava - diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java index 33dcdf3c..66dcc6bd 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java @@ -20,8 +20,7 @@ package cn.hippo4j.discovery.core; import cn.hippo4j.common.design.observer.AbstractSubjectCenter; import cn.hippo4j.common.model.InstanceInfo; import cn.hippo4j.common.model.InstanceInfo.InstanceStatus; -import com.google.common.collect.Lists; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import cn.hutool.core.thread.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -57,9 +56,9 @@ public class BaseInstanceRegistry implements InstanceRegistry { public List> listInstance(String appName) { Map> appNameLeaseMap = registry.get(appName); if (CollectionUtils.isEmpty(appNameLeaseMap)) { - return Lists.newArrayList(); + return new ArrayList<>(); } - List> appNameLeaseList = Lists.newArrayList(); + List> appNameLeaseList = new ArrayList<>(); appNameLeaseMap.values().forEach(each -> appNameLeaseList.add(each)); return appNameLeaseList; } @@ -82,7 +81,7 @@ public class BaseInstanceRegistry implements InstanceRegistry { registrant = existingLease.getHolder(); } } - Lease lease = new Lease(registrant); + Lease lease = new Lease<>(registrant); if (existingLease != null) { lease.setServiceUpTimestamp(existingLease.getServiceUpTimestamp()); } @@ -190,7 +189,7 @@ public class BaseInstanceRegistry implements InstanceRegistry { new ScheduledThreadPoolExecutor( SCHEDULED_THREAD_CORE_NUM, new ThreadFactoryBuilder() - .setNameFormat("registry-eviction") + .setNamePrefix("registry-eviction") .setDaemon(true) .build()); diff --git a/hippo4j-message/pom.xml b/hippo4j-message/pom.xml index 16e80419..60de5b82 100644 --- a/hippo4j-message/pom.xml +++ b/hippo4j-message/pom.xml @@ -39,11 +39,6 @@ commons-codec - - com.google.guava - guava - - cn.hutool hutool-all diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java index ad2f2a33..ee91e50c 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java @@ -17,6 +17,8 @@ package cn.hippo4j.message.platform; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.FileUtil; import cn.hippo4j.common.toolkit.Singleton; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.message.dto.NotifyConfigDTO; @@ -25,11 +27,9 @@ import cn.hippo4j.message.platform.base.AbstractRobotSendMessageHandler; import cn.hippo4j.message.platform.base.RobotMessageActualContent; import cn.hippo4j.message.platform.base.RobotMessageExecuteDTO; import cn.hippo4j.message.platform.constant.DingAlarmConstants; -import cn.hippo4j.common.toolkit.FileUtil; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiRobotSendRequest; -import com.google.common.collect.Lists; import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; @@ -93,7 +93,7 @@ public class DingSendMessageHandler extends AbstractRobotSendMessageHandler { markdown.setTitle(Objects.equals(notifyConfig.getType(), "CONFIG") ? DING_NOTICE_TITLE : DING_ALARM_TITLE); markdown.setText(robotMessageExecuteDTO.getText()); OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); - at.setAtMobiles(Lists.newArrayList(notifyConfig.getReceives().split(","))); + at.setAtMobiles(CollectionUtil.newArrayList(notifyConfig.getReceives().split(","))); request.setAt(at); request.setMarkdown(markdown); try { diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java index 12423ff3..c2d2acd2 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java @@ -17,6 +17,7 @@ package cn.hippo4j.message.platform.base; +import cn.hippo4j.common.toolkit.Joiner; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.enums.NotifyTypeEnum; @@ -25,7 +26,6 @@ import cn.hippo4j.message.request.ChangeParameterNotifyRequest; import cn.hippo4j.message.service.SendMessageHandler; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.base.Joiner; import java.util.Objects; diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java index 6d33522f..c0f0c500 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java @@ -21,11 +21,12 @@ import cn.hippo4j.common.constant.Constants; import cn.hippo4j.message.dto.AlarmControlDTO; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.collect.Maps; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @@ -34,9 +35,9 @@ import java.util.concurrent.locks.ReentrantLock; */ public class AlarmControlHandler { - private final Map threadPoolLock = Maps.newHashMap(); + private final Map threadPoolLock = new HashMap<>(); - private final Map> threadPoolAlarmCache = Maps.newConcurrentMap(); + private final Map> threadPoolAlarmCache = new ConcurrentHashMap<>(); /** * Control message push alarm frequency. @@ -77,7 +78,7 @@ public class AlarmControlHandler { */ public void initCacheAndLock(String threadPoolId, String platform, Integer interval) { String threadPoolKey = StrUtil.builder(threadPoolId, Constants.GROUP_KEY_DELIMITER, platform).toString(); - Cache cache = CacheBuilder.newBuilder() + Cache cache = Caffeine.newBuilder() .expireAfterWrite(interval, TimeUnit.MINUTES) .build(); threadPoolAlarmCache.put(threadPoolKey, cache); diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java index f73de9c8..c6c98242 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java @@ -17,8 +17,8 @@ package cn.hippo4j.message.service; -import cn.hippo4j.message.api.NotifyConfigBuilder; import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.message.api.NotifyConfigBuilder; import cn.hippo4j.message.dto.AlarmControlDTO; import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.enums.NotifyTypeEnum; @@ -26,12 +26,12 @@ import cn.hippo4j.message.request.AlarmNotifyRequest; import cn.hippo4j.message.request.ChangeParameterNotifyRequest; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Maps; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -47,9 +47,9 @@ public class Hippo4jBaseSendMessageService implements Hippo4jSendMessageService, private final AlarmControlHandler alarmControlHandler; @Getter - public final Map> notifyConfigs = Maps.newHashMap(); + public final Map> notifyConfigs = new HashMap<>(); - private final Map sendMessageHandlers = Maps.newHashMap(); + private final Map sendMessageHandlers = new HashMap<>(); @Override public void sendAlarmMessage(NotifyTypeEnum typeEnum, AlarmNotifyRequest alarmNotifyRequest) { diff --git a/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java index 5b524648..dbbe5b00 100644 --- a/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java @@ -19,8 +19,6 @@ package cn.hippo4j.monitor.es; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.StringUtil; -import com.google.common.base.Throwables; -import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; @@ -30,6 +28,9 @@ import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.core.env.Environment; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; import java.util.List; /** @@ -65,7 +66,9 @@ public class EsClientHolder { log.info("[ES RestHighLevelClient] success to connect es!host:{},scheme:{}", host, scheme); return client; } catch (Exception ex) { - log.error("[ES RestHighLevelClient] fail to connect es! cause:{}", Throwables.getStackTraceAsString(ex)); + StringWriter stackTrace = new StringWriter(); + ex.printStackTrace(new PrintWriter(stackTrace)); + log.error("[ES RestHighLevelClient] fail to connect es! cause:{}", stackTrace); } return null; } @@ -86,7 +89,7 @@ public class EsClientHolder { private static List parseHosts() { String[] hostAndPorts = host.split(","); - List hosts = Lists.newArrayList(); + List hosts = new ArrayList<>(); for (String hostAndPort : hostAndPorts) { hostAndPort = hostAndPort.trim(); hosts.add(new HttpHost(hostAndPort.split(":")[0], Integer.parseInt(hostAndPort.split(":")[1]), scheme)); diff --git a/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java index a9ee5bbf..7c1b930c 100644 --- a/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java @@ -19,17 +19,17 @@ package cn.hippo4j.monitor.micrometer; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; -import cn.hutool.core.bean.BeanUtil; import cn.hippo4j.monitor.base.AbstractDynamicThreadPoolMonitor; import cn.hippo4j.monitor.base.MonitorTypeEnum; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import cn.hutool.core.bean.BeanUtil; import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.Tag; import org.springframework.core.env.Environment; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Micrometer monitor handler. @@ -42,7 +42,7 @@ public class MicrometerMonitorHandler extends AbstractDynamicThreadPoolMonitor { private final static String APPLICATION_NAME_TAG = "application.name"; - private final Map RUN_STATE_CACHE = Maps.newConcurrentMap(); + private final Map RUN_STATE_CACHE = new ConcurrentHashMap<>(); public MicrometerMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { super(threadPoolRunStateHandler); @@ -58,7 +58,7 @@ public class MicrometerMonitorHandler extends AbstractDynamicThreadPoolMonitor { } Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); String applicationName = environment.getProperty("spring.application.name", "application"); - Iterable tags = Lists.newArrayList( + Iterable tags = CollectionUtil.newArrayList( Tag.of(DYNAMIC_THREAD_POOL_ID_TAG, poolRunStateInfo.getTpId()), Tag.of(APPLICATION_NAME_TAG, applicationName)); Metrics.gauge(metricName("current.load"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getSimpleCurrentLoad); diff --git a/hippo4j-server/src/main/java/cn/hippo4j/server/init/LocalDataSourceLoader.java b/hippo4j-server/src/main/java/cn/hippo4j/server/init/LocalDataSourceLoader.java index fc3283c4..447000b8 100644 --- a/hippo4j-server/src/main/java/cn/hippo4j/server/init/LocalDataSourceLoader.java +++ b/hippo4j-server/src/main/java/cn/hippo4j/server/init/LocalDataSourceLoader.java @@ -18,7 +18,6 @@ package cn.hippo4j.server.init; import cn.hippo4j.server.config.DataBaseProperties; -import com.google.common.base.Splitter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.io.Resources; @@ -37,7 +36,6 @@ import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.sql.*; -import java.util.List; import java.util.Objects; /** @@ -105,7 +103,7 @@ public class LocalDataSourceLoader implements InstantiationAwareBeanPostProcesso runner.setLogWriter(null); runner.setAutoCommit(true); Resources.setCharset(StandardCharsets.UTF_8); - List initScripts = Splitter.on(";").splitToList(script); + String[] initScripts = StringUtils.split(script, ";"); for (String sqlScript : initScripts) { if (sqlScript.startsWith(PRE_FIX)) { String sqlFile = sqlScript.substring(PRE_FIX.length()); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java index 1bdecb95..46fa5579 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java @@ -18,19 +18,19 @@ package cn.hippo4j.config.springboot.starter.monitor; import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; -import cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; import cn.hippo4j.monitor.base.DynamicThreadPoolMonitor; import cn.hippo4j.monitor.base.ThreadPoolMonitor; -import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -59,7 +59,7 @@ public class DynamicThreadPoolMonitorExecutor implements ApplicationRunner { return; } log.info("Start monitoring the running status of dynamic thread pool."); - threadPoolMonitors = Lists.newArrayList(); + threadPoolMonitors = new ArrayList<>(); collectExecutor = new ScheduledThreadPoolExecutor( new Integer(1), ThreadFactoryBuilder.builder().daemon(true).prefix("client.scheduled.collect.data").build()); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java index e4ae0a30..d66e994d 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java @@ -22,18 +22,14 @@ import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; import cn.hippo4j.config.springboot.starter.config.NotifyPlatformProperties; -import cn.hippo4j.message.service.AlarmControlHandler; -import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.service.AlarmControlHandler; import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -49,7 +45,7 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { @Override public Map> buildNotify() { - Map> resultMap = Maps.newHashMap(); + Map> resultMap = new HashMap<>(); boolean globalAlarm = Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getAlarm()).orElse(true); List executors = configProperties.getExecutors(); if (CollectionUtil.isEmpty(executors)) { @@ -75,10 +71,10 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { * @return */ public Map> buildSingleNotifyConfig(ExecutorProperties executorProperties) { - Map> resultMap = Maps.newHashMap(); + Map> resultMap = new HashMap<>(); String threadPoolId = executorProperties.getThreadPoolId(); String alarmBuildKey = threadPoolId + "+ALARM"; - List alarmNotifyConfigs = Lists.newArrayList(); + List alarmNotifyConfigs = new ArrayList<>(); List notifyPlatforms = configProperties.getNotifyPlatforms(); for (NotifyPlatformProperties platformProperties : notifyPlatforms) { NotifyConfigDTO notifyConfig = new NotifyConfigDTO(); @@ -96,7 +92,7 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { } resultMap.put(alarmBuildKey, alarmNotifyConfigs); String changeBuildKey = threadPoolId + "+CONFIG"; - List changeNotifyConfigs = Lists.newArrayList(); + List changeNotifyConfigs = new ArrayList<>(); for (NotifyPlatformProperties platformProperties : notifyPlatforms) { NotifyConfigDTO notifyConfig = new NotifyConfigDTO(); notifyConfig.setPlatform(platformProperties.getPlatform()); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java index c1ae1182..61eb3056 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java @@ -17,20 +17,15 @@ package cn.hippo4j.config.springboot.starter.parser; -import com.google.common.collect.Lists; - import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; +import java.util.*; /** * Config parser handler. */ public class ConfigParserHandler { - private static final List PARSERS = Lists.newArrayList(); + private static final List PARSERS = new ArrayList<>(); private ConfigParserHandler() { ServiceLoader loader = ServiceLoader.load(ConfigParser.class); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java index 211fe13c..1a2260df 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java @@ -17,7 +17,7 @@ package cn.hippo4j.config.springboot.starter.parser; -import com.google.common.collect.Lists; +import cn.hippo4j.common.toolkit.CollectionUtil; import java.io.IOException; import java.io.StringReader; @@ -39,6 +39,6 @@ public class PropertiesConfigParser extends AbstractConfigParser { @Override public List getConfigFileTypes() { - return Lists.newArrayList(ConfigFileTypeEnum.PROPERTIES); + return CollectionUtil.newArrayList(ConfigFileTypeEnum.PROPERTIES); } } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java index 75a8abbb..9613e882 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java @@ -17,14 +17,12 @@ package cn.hippo4j.config.springboot.starter.parser; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import cn.hippo4j.common.toolkit.CollectionUtil; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.core.io.ByteArrayResource; import org.springframework.util.StringUtils; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Yaml config parser. @@ -34,7 +32,7 @@ public class YamlConfigParser extends AbstractConfigParser { @Override public Map doParse(String content) { if (StringUtils.isEmpty(content)) { - return Maps.newHashMapWithExpectedSize(0); + return new HashMap<>(1); } YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); yamlPropertiesFactoryBean.setResources(new ByteArrayResource(content.getBytes())); @@ -43,6 +41,6 @@ public class YamlConfigParser extends AbstractConfigParser { @Override public List getConfigFileTypes() { - return Lists.newArrayList(ConfigFileTypeEnum.YML, ConfigFileTypeEnum.YAML); + return CollectionUtil.newArrayList(ConfigFileTypeEnum.YML, ConfigFileTypeEnum.YAML); } } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java index 90425870..6233bd82 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java @@ -24,10 +24,10 @@ import com.ctrip.framework.apollo.ConfigFile; import com.ctrip.framework.apollo.ConfigService; import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; import com.ctrip.framework.apollo.model.ConfigChange; -import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import java.util.HashMap; import java.util.Map; /** @@ -60,7 +60,7 @@ public class ApolloRefresherHandler extends AbstractConfigThreadPoolDynamicRefre String namespace = this.namespace.replaceAll("." + bootstrapConfigProperties.getConfigFileType().getValue(), ""); ConfigFileFormat configFileFormat = ConfigFileFormat.fromString(bootstrapConfigProperties.getConfigFileType().getValue()); ConfigFile configFile = ConfigService.getConfigFile(namespace, configFileFormat); - Map newChangeValueMap = Maps.newHashMap(); + Map newChangeValueMap = new HashMap<>(); configChangeEvent.changedKeys().stream().filter(each -> each.contains(BootstrapConfigProperties.PREFIX)).forEach(each -> { ConfigChange change = configChangeEvent.getChange(each); String newValue = change.getNewValue(); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java index 433c6535..f5e84f22 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java @@ -25,13 +25,13 @@ import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; import cn.hippo4j.config.springboot.starter.config.NotifyPlatformProperties; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.context.properties.source.ConfigurationPropertySource; import org.springframework.boot.context.properties.source.MapConfigurationPropertySource; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -74,7 +74,7 @@ public class BootstrapConfigPropertiesBinderAdapt { BootstrapConfigProperties bindableConfigProperties; try { // filter - Map targetMap = Maps.newHashMap(); + Map targetMap = new HashMap<>(); configInfo.forEach((key, val) -> { boolean containFlag = key != null && StringUtil.isNotBlank((String) key) @@ -87,12 +87,12 @@ public class BootstrapConfigPropertiesBinderAdapt { } }); // convert - List executorPropertiesList = Lists.newArrayList(); - List notifyPropertiesList = Lists.newArrayList(); + List executorPropertiesList = new ArrayList<>(); + List notifyPropertiesList = new ArrayList<>(); for (int i = 0; i < Integer.MAX_VALUE; i++) { - Map executorSingleMap = Maps.newHashMap(); - Map platformSingleMap = Maps.newHashMap(); - Map notifySingleMap = Maps.newHashMap(); + Map executorSingleMap = new HashMap<>(); + Map platformSingleMap = new HashMap<>(); + Map notifySingleMap = new HashMap<>(); for (Map.Entry entry : targetMap.entrySet()) { String key = entry.getKey().toString(); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java index c2825ed2..48d03fe4 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/PolarisRefresherHandler.java @@ -17,18 +17,17 @@ package cn.hippo4j.config.springboot.starter.refresher; -import java.util.Map; -import java.util.Objects; - -import com.google.common.collect.Maps; import com.tencent.polaris.configuration.api.core.ConfigFileService; import com.tencent.polaris.configuration.api.core.ConfigKVFile; import com.tencent.polaris.configuration.api.core.ConfigKVFileChangeListener; import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo; import lombok.RequiredArgsConstructor; - import org.springframework.beans.factory.annotation.Value; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + /** *@author : wh *@date : 2022/10/1 15:24 @@ -68,7 +67,7 @@ public class PolarisRefresherHandler extends AbstractConfigThreadPoolDynamicRefr ConfigKVFile configFile = getConfigKVFile(); configFile.addChangeListener((ConfigKVFileChangeListener) event -> { String content = configFile.getContent(); - Map newChangeValueMap = Maps.newHashMap(); + Map newChangeValueMap = new HashMap<>(); for (String key : event.changedKeys()) { ConfigPropertyChangeInfo changeInfo = event.getChangeInfo(key); newChangeValueMap.put(key, changeInfo.getNewValue()); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java index fe886001..c62da963 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java @@ -19,7 +19,6 @@ package cn.hippo4j.config.springboot.starter.refresher; import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; -import com.google.common.base.Charsets; import lombok.extern.slf4j.Slf4j; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; @@ -32,6 +31,7 @@ import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.curator.utils.ZKPaths; import org.apache.zookeeper.WatchedEvent; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; @@ -121,7 +121,7 @@ public class ZookeeperRefresherHandler extends AbstractConfigThreadPoolDynamicRe final GetDataBuilder data = curatorFramework.getData(); String value = ""; try { - value = new String(data.watched().forPath(n), Charsets.UTF_8); + value = new String(data.watched().forPath(n), StandardCharsets.UTF_8); } catch (Exception ex) { log.error("Load zookeeper node error", ex); } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java index 1bf61464..e570caa4 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java @@ -21,7 +21,6 @@ import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; import cn.hippo4j.common.executor.support.ResizableCapacityLinkedBlockingQueue; import cn.hippo4j.common.toolkit.CollectionUtil; -import cn.hippo4j.config.springboot.starter.config.AdapterExecutorProperties; import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; import cn.hippo4j.config.springboot.starter.notify.CoreNotifyConfigBuilder; @@ -36,15 +35,11 @@ import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.request.ChangeParameterNotifyRequest; import cn.hippo4j.message.service.Hippo4jBaseSendMessageService; import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; -import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -160,7 +155,7 @@ public class DynamicThreadPoolRefreshListener extends AbstractRefreshListener changeKeys = Lists.newArrayList(); + List changeKeys = new ArrayList<>(); Map> newDynamicThreadPoolNotifyMap = coreNotifyConfigBuilder.buildSingleNotifyConfig(executorProperties); Map> notifyConfigs = hippo4jBaseSendMessageService.getNotifyConfigs(); if (CollectionUtil.isNotEmpty(notifyConfigs)) { diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolAdapterRegister.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolAdapterRegister.java index 5d9f6979..ba4c96ef 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolAdapterRegister.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolAdapterRegister.java @@ -18,9 +18,8 @@ package cn.hippo4j.config.springboot.starter.support; import cn.hippo4j.common.toolkit.CollectionUtil; -import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.config.springboot.starter.config.AdapterExecutorProperties; -import com.google.common.collect.Maps; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; @@ -28,6 +27,7 @@ import org.springframework.boot.ApplicationRunner; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; @@ -40,7 +40,7 @@ public class DynamicThreadPoolAdapterRegister implements ApplicationRunner { private final BootstrapConfigProperties bootstrapConfigProperties; - public static final Map ADAPTER_EXECUTORS_MAP = Maps.newConcurrentMap(); + public static final Map ADAPTER_EXECUTORS_MAP = new ConcurrentHashMap<>(); @Override public void run(ApplicationArguments args) throws Exception { diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java index fc8b88a9..bef01cac 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java @@ -18,16 +18,16 @@ package cn.hippo4j.config.springboot.starter.support; import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; -import com.google.common.collect.Maps; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Global core thread-pool manage. */ public class GlobalCoreThreadPoolManage { - private static final Map EXECUTOR_PROPERTIES = Maps.newConcurrentMap(); + private static final Map EXECUTOR_PROPERTIES = new ConcurrentHashMap<>(); /** * Get properties. diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java index d520e0c3..a5def8e0 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java @@ -29,13 +29,13 @@ import cn.hippo4j.core.toolkit.inet.InetUtils; import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.springboot.starter.remote.HttpAgent; import cn.hippo4j.springboot.starter.toolkit.CloudCommonIdUtil; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.env.ConfigurableEnvironment; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -64,7 +64,7 @@ public class ThreadPoolAdapterRegister implements ApplicationRunner, ThreadPoolA @Override public List getThreadPoolAdapterCacheConfigs(Map threadPoolAdapterMap) { - List adapterCacheConfigList = Lists.newArrayList(); + List adapterCacheConfigList = new ArrayList<>(); for (Map.Entry threadPoolAdapterEntry : threadPoolAdapterMap.entrySet()) { ThreadPoolAdapter threadPoolAdapter = threadPoolAdapterEntry.getValue(); List threadPoolStates = threadPoolAdapter.getThreadPoolStates(); diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java index b4d5706b..cbbf8293 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java @@ -33,7 +33,6 @@ import cn.hippo4j.springboot.starter.monitor.collect.Collector; import cn.hippo4j.springboot.starter.monitor.send.MessageSender; import cn.hippo4j.springboot.starter.remote.ServerHealthCheck; import cn.hutool.core.collection.CollUtil; -import com.google.common.collect.Lists; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -41,10 +40,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; import org.springframework.boot.CommandLineRunner; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -110,7 +106,7 @@ public class ReportingEventExecutor implements Runnable, CommandLineRunner, Disp if (!properties.getCollect()) { return; } - threadPoolMonitors = Lists.newArrayList(); + threadPoolMonitors = new ArrayList<>(); String collectType = Optional.ofNullable(StringUtil.emptyToNull(properties.getCollectType())).orElse(MonitorTypeEnum.SERVER.name().toLowerCase()); collectVesselExecutor = new ScheduledThreadPoolExecutor( new Integer(collectType.split(",").length), diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java index d38b3ed6..c09b57f7 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java @@ -22,13 +22,13 @@ import cn.hippo4j.common.monitor.AbstractMessage; import cn.hippo4j.common.monitor.Message; import cn.hippo4j.common.monitor.MessageTypeEnum; import cn.hippo4j.common.monitor.RuntimeMessage; -import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hutool.core.bean.BeanUtil; -import com.google.common.collect.Lists; import lombok.AllArgsConstructor; +import java.util.ArrayList; import java.util.List; import static cn.hippo4j.core.toolkit.IdentifyUtil.getThreadPoolIdentify; @@ -44,7 +44,7 @@ public class RunTimeInfoCollector extends AbstractThreadPoolRuntime implements C @Override public Message collectMessage() { AbstractMessage message = new RuntimeMessage(); - List runtimeMessages = Lists.newArrayList(); + List runtimeMessages = new ArrayList<>(); List listThreadPoolId = GlobalThreadPoolManage.listThreadPoolId(); for (String each : listThreadPoolId) { ThreadPoolRunStateInfo poolRunState = getPoolRunState(each); diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java index 4065b27c..8aeade7a 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java @@ -21,20 +21,20 @@ import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; -import cn.hippo4j.message.service.AlarmControlHandler; +import cn.hippo4j.message.api.NotifyConfigBuilder; import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.dto.ThreadPoolNotifyDTO; -import cn.hippo4j.message.api.NotifyConfigBuilder; import cn.hippo4j.message.request.ThreadPoolNotifyRequest; +import cn.hippo4j.message.service.AlarmControlHandler; import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.springboot.starter.remote.HttpAgent; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -58,14 +58,14 @@ public class ServerNotifyConfigBuilder implements NotifyConfigBuilder { List threadPoolIds = GlobalThreadPoolManage.listThreadPoolId(); if (CollUtil.isEmpty(threadPoolIds)) { log.warn("The client does not have a dynamic thread pool instance configured."); - return Maps.newHashMap(); + return new HashMap<>(); } return getAndInitNotify(threadPoolIds); } public Map> getAndInitNotify(List threadPoolIds) { - Map> resultMap = Maps.newHashMap(); - List groupKeys = Lists.newArrayList(); + Map> resultMap = new HashMap<>(); + List groupKeys = new ArrayList<>(); threadPoolIds.forEach(each -> { String groupKey = GroupKey.getKeyTenant(each, properties.getItemId(), properties.getNamespace()); groupKeys.add(groupKey); diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java index 9cd62075..3a02f4cb 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java @@ -20,13 +20,13 @@ package cn.hippo4j.springboot.starter.remote; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.springboot.starter.security.SecurityProxy; import cn.hippo4j.springboot.starter.toolkit.HttpClientUtil; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Maps; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -141,7 +141,7 @@ public class ServerHttpAgent implements HttpAgent { @Deprecated private String injectSecurityInfoByPath(String path) { - String resultPath = httpClientUtil.buildUrl(path, injectSecurityInfo(Maps.newHashMap())); + String resultPath = httpClientUtil.buildUrl(path, injectSecurityInfo(new HashMap<>())); return resultPath; } } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/support/DynamicThreadPoolConfigService.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/support/DynamicThreadPoolConfigService.java index f4230eec..ae4e1c23 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/support/DynamicThreadPoolConfigService.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/support/DynamicThreadPoolConfigService.java @@ -22,6 +22,7 @@ import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; import cn.hippo4j.common.toolkit.Assert; import cn.hippo4j.common.toolkit.BooleanUtil; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.exception.ServiceException; @@ -38,8 +39,6 @@ import cn.hippo4j.springboot.starter.core.DynamicThreadPoolSubscribeConfig; import cn.hippo4j.springboot.starter.event.ApplicationCompleteEvent; import cn.hippo4j.springboot.starter.notify.ServerNotifyConfigBuilder; import cn.hippo4j.springboot.starter.remote.HttpAgent; -import com.google.common.collect.Lists; -import cn.hippo4j.springboot.starter.remote.HttpAgent; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; @@ -117,7 +116,7 @@ public class DynamicThreadPoolConfigService extends AbstractDynamicThreadPoolSer registerParameter.getActiveAlarm(), registerParameter.getCapacityAlarm()); GlobalNotifyAlarmManage.put(registerParameter.getThreadPoolId(), threadPoolNotifyAlarm); - Map> builderNotify = notifyConfigBuilder.getAndInitNotify(Lists.newArrayList(registerParameter.getThreadPoolId())); + Map> builderNotify = notifyConfigBuilder.getAndInitNotify(CollectionUtil.newArrayList(registerParameter.getThreadPoolId())); hippo4jBaseSendMessageService.putPlatform(builderNotify); } diff --git a/pom.xml b/pom.xml index 0ab7d6c6..63e9cf33 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ 1.4.2-SNAPSHOT 6.5.0 + 2.9.3 30.0-jre 3.12.0 5.4.7 @@ -124,6 +125,12 @@ dozer-core ${dozer.version} + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + com.google.guava guava From 5c687b0e21cc71e7070d61bd588cb38a175b383f Mon Sep 17 00:00:00 2001 From: pirme Date: Thu, 6 Oct 2022 00:12:02 +0800 Subject: [PATCH 17/30] Update the list of contributors --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2084e0da..0df41a19 100644 --- a/README.md +++ b/README.md @@ -151,17 +151,17 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 - - liulinfei121 + + road2master
- Null + Lijx
- - road2master + + liulinfei121
- Lijx + Null
From ceddf9ade152f76d157d30cb7c91838ea49a46aa Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Thu, 6 Oct 2022 00:16:59 +0800 Subject: [PATCH 18/30] Remove extra blank lines --- .../java/cn/hippo4j/common/toolkit/CollectionUtil.java | 3 +-- .../src/main/java/cn/hippo4j/common/toolkit/Joiner.java | 8 +++----- pom.xml | 1 - 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java index c57a1db1..0177dca4 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java @@ -129,7 +129,7 @@ public class CollectionUtil { */ @SafeVarargs public static ArrayList newArrayList(E... elements) { - Objects.requireNonNull(elements);// for GWT + Objects.requireNonNull(elements); // Avoid integer overflow when a large array is passed in int capacity = computeArrayListCapacity(elements.length); ArrayList list = new ArrayList<>(capacity); @@ -139,7 +139,6 @@ public class CollectionUtil { private static int computeArrayListCapacity(int arraySize) { checkNonnegative(arraySize); - // TODO(kevinb): Figure out the right behavior, and document it return saturatedCast(5L + arraySize + (arraySize / 10)); } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java index 70dd23fa..05eefe1f 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java @@ -24,7 +24,6 @@ import java.util.Objects; /** * reference google guava - * */ public class Joiner { @@ -34,7 +33,9 @@ public class Joiner { this.separator = Objects.requireNonNull(separator); } - /** Returns a joiner which automatically places {@code separator} between consecutive elements. */ + /** + * Returns a joiner which automatically places {@code separator} between consecutive elements. + */ public static Joiner on(String separator) { return new Joiner(separator); } @@ -42,7 +43,6 @@ public class Joiner { /** * Returns a string containing the string representation of each of {@code parts}, using the * previously configured separator between each. - * */ public final String join(Object[] parts) { return join(Arrays.asList(parts)); @@ -55,7 +55,6 @@ public class Joiner { /** * Returns a string containing the string representation of each of {@code parts}, using the * previously configured separator between each. - * */ public final String join(Iterator parts) { return appendTo(new StringBuilder(), parts).toString(); @@ -86,5 +85,4 @@ public class Joiner { Objects.requireNonNull(part); return (part instanceof CharSequence) ? (CharSequence) part : part.toString(); } - } diff --git a/pom.xml b/pom.xml index 63e9cf33..d3955299 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,6 @@ caffeine ${caffeine.version}
- com.google.guava guava From 50746f41fe786e61b2fbff28c79a28d49c6fcba2 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Thu, 6 Oct 2022 12:14:03 +0800 Subject: [PATCH 19/30] Optimize client cache capacity --- .../config/service/ConfigServletInner.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java index 48457554..16eb8f4d 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java @@ -19,7 +19,6 @@ package cn.hippo4j.config.service; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; -import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -36,20 +35,21 @@ import static cn.hippo4j.common.constant.Constants.WEIGHT_CONFIGS; @RequiredArgsConstructor public class ConfigServletInner { - @NonNull private final LongPollingService longPollingService; + private static final int CLIENT_IDENTIFY_MAXIMUM_SIZE = 16384; + private final Cache deWeightCache = Caffeine.newBuilder() - .maximumSize(1024) + .maximumSize(CLIENT_IDENTIFY_MAXIMUM_SIZE) .build(); /** * Poll configuration. * - * @param request - * @param response - * @param clientMd5Map - * @param probeRequestSize + * @param request http servlet request + * @param response http servlet response + * @param clientMd5Map client md5 map + * @param probeRequestSize probe request size * @return */ public String doPollingConfig(HttpServletRequest request, HttpServletResponse response, Map clientMd5Map, int probeRequestSize) { @@ -66,7 +66,7 @@ public class ConfigServletInner { * When a user proposes to deploy in the company environment, the same request will be called repeatedly. * This problem belongs to an extremely individual scenario. Since it cannot be reproduced, so first solve the problem in this way. * - * @param request + * @param request http servlet request * @return */ private boolean weightVerification(HttpServletRequest request) { From e03d464053d31d3d6b67a7fb8922cd6da2470c6a Mon Sep 17 00:00:00 2001 From: pizihao <48643103+pizihao@users.noreply.github.com> Date: Thu, 6 Oct 2022 16:03:52 +0800 Subject: [PATCH 20/30] Globally remove the Hutooltoolkit dependency (#759) (#762) * fix : global remove hutool(#725) * fix : update use for hutool(#725) * fix : Replenish toolkit(#725) * fix : merge branch conflicts(#725) * fix : modify code format(#725) * fix : config BeanUtil merged to common(#725) * fix : add IdUtil for generate UUID(#725) * fix : replace method for convert bean(#725) Co-authored-by: pizihao --- .../hystrix/ThreadPoolAdapterScheduler.java | 6 +- .../web/TomcatWebThreadPoolHandler.java | 5 +- .../web/UndertowWebThreadPoolHandler.java | 5 +- .../web/WebThreadPoolRunStateHandler.java | 24 +-- hippo4j-auth/pom.xml | 5 - .../auth/filter/JWTAuthenticationFilter.java | 7 +- .../auth/filter/JWTAuthorizationFilter.java | 4 +- .../auth/security/JwtTokenManager.java | 6 +- .../service/impl/PermissionServiceImpl.java | 13 +- .../auth/service/impl/RoleServiceImpl.java | 16 +- .../auth/service/impl/UserServiceImpl.java | 13 +- hippo4j-common/pom.xml | 10 +- .../design/builder}/ThreadFactoryBuilder.java | 4 +- .../cn/hippo4j/common/toolkit/Assert.java | 10 ++ .../cn/hippo4j/common/toolkit/BeanUtil.java | 152 ++++++++++++++++++ .../hippo4j/common/toolkit/BooleanUtil.java | 4 +- .../common/toolkit/CollectionUtil.java | 16 ++ .../cn/hippo4j/common/toolkit/DateUtil.java | 76 +++++++++ .../cn/hippo4j/common/toolkit/FileUtil.java | 43 ++++- .../cn/hippo4j/common/toolkit/IdUtil.java | 85 ++++++++++ .../common/toolkit/MessageConvert.java | 2 +- .../hippo4j/common/toolkit/ReflectUtil.java | 117 ++++++++++++-- .../cn/hippo4j/common/toolkit/Singleton.java | 2 +- .../cn/hippo4j/common/toolkit/StringUtil.java | 83 ++++++++++ .../hippo4j/common/toolkit/UserContext.java | 2 +- .../web/exception/IllegalException.java | 47 ++++++ .../hippo4j/common}/toolkit/BeanUtilTest.java | 70 ++++++-- .../common/toolkit/BooleanUtilTest.java | 9 +- .../hippo4j/common/toolkit/FileUtilTest.java | 15 +- .../cn/hippo4j/common/toolkit/IdUtilTest.java | 37 +++++ .../common/toolkit/ReflectUtilTest.java | 70 ++++++-- .../common/toolkit/StringUtilTest.java | 7 + .../common/toolkit/ThreadUtilTest.java | 7 +- .../common/toolkit/UserContextTest.java | 3 - hippo4j-config/pom.xml | 21 +-- .../config/controller/ConfigController.java | 4 +- .../monitor/TimeCleanHistoryDataTask.java | 9 +- .../config/notify/DefaultPublisher.java | 6 +- .../config/notify/DefaultSharePublisher.java | 7 +- .../config/service/ConfigCacheService.java | 7 +- .../config/service/LongPollingService.java | 7 +- .../service/ThreadPoolAdapterService.java | 14 +- .../service/biz/impl/ConfigServiceImpl.java | 11 +- .../biz/impl/HisRunDataServiceImpl.java | 32 ++-- .../service/biz/impl/ItemServiceImpl.java | 2 +- .../service/biz/impl/NotifyServiceImpl.java | 22 +-- .../biz/impl/OperationLogServiceImpl.java | 10 +- .../service/biz/impl/TenantServiceImpl.java | 2 +- .../biz/impl/ThreadPoolServiceImpl.java | 2 +- .../ClientCloseHookRemoveConfigCache.java | 4 +- .../cn/hippo4j/config/toolkit/BeanUtil.java | 67 -------- .../cn/hippo4j/config/toolkit/MapUtil.java | 4 +- .../hippo4j/config/toolkit/RequestUtil.java | 4 +- .../hippo4j/config/toolkit/ClassUtilTest.java | 1 - .../hippo4j/config/toolkit/EnvUtilTest.java | 4 +- .../hippo4j/config/toolkit/MapUtilTest.java | 2 +- .../config/toolkit/Md5ConfigUtilTest.java | 6 +- hippo4j-console/pom.xml | 4 - .../ThreadPoolAdapterController.java | 14 +- .../controller/ThreadPoolController.java | 65 +++++--- .../service/impl/DashboardServiceImpl.java | 37 +++-- .../ThreadPoolNotifyAlarmHandler.java | 8 +- .../state/AbstractThreadPoolRuntime.java | 6 +- .../state/ThreadPoolRunStateHandler.java | 27 ++-- .../state/ThreadPoolStatusHandler.java | 4 +- .../AbstractBuildThreadPoolTemplate.java | 1 + .../cn/hippo4j/core/toolkit/IdentifyUtil.java | 23 ++- .../discovery/core/BaseInstanceRegistry.java | 6 +- .../core/inittest/AlarmSendMessageTest.java | 9 +- .../core/inittest/RunStateHandlerTest.java | 13 +- .../core/inittest/TaskDecoratorTest.java | 15 +- .../example/produce/KafkaMessageProduce.java | 5 +- .../example/producer/MessageProduce.java | 5 +- .../rabbitmq/example/MessageProduce.java | 5 +- .../rocketmq/example/MessageProduce.java | 5 +- hippo4j-message/pom.xml | 4 - .../platform/LarkSendMessageHandler.java | 24 +-- .../platform/WeChatSendMessageHandler.java | 10 +- .../base/AbstractRobotSendMessageHandler.java | 14 +- .../message/service/AlarmControlHandler.java | 10 +- .../Hippo4jBaseSendMessageService.java | 21 ++- .../hippo4j/monitor/es/EsMonitorHandler.java | 10 +- .../micrometer/MicrometerMonitorHandler.java | 4 +- .../DynamicThreadPoolMonitorExecutor.java | 2 +- .../notify/CoreNotifyConfigBuilder.java | 3 +- .../BootstrapConfigPropertiesBinderAdapt.java | 9 +- .../AdapterExecutorsRefreshListener.java | 5 +- .../config/DiscoveryConfiguration.java | 7 +- .../springboot/starter/core/ClientWorker.java | 11 +- .../starter/core/DiscoveryClient.java | 9 +- .../monitor/ReportingEventExecutor.java | 5 +- .../monitor/collect/RunTimeInfoCollector.java | 5 +- .../notify/ServerNotifyConfigBuilder.java | 8 +- .../starter/remote/AbstractHealthCheck.java | 2 +- .../starter/remote/ServerHttpAgent.java | 6 +- .../starter/remote/ServerListManager.java | 4 +- pom.xml | 6 - 97 files changed, 1167 insertions(+), 487 deletions(-) rename {hippo4j-core/src/main/java/cn/hippo4j/core/executor/support => hippo4j-common/src/main/java/cn/hippo4j/common/design/builder}/ThreadFactoryBuilder.java (97%) create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/DateUtil.java create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/IdUtil.java create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/IllegalException.java rename {hippo4j-config/src/test/java/cn/hippo4j/config => hippo4j-common/src/test/java/cn/hippo4j/common}/toolkit/BeanUtilTest.java (67%) create mode 100644 hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/IdUtilTest.java delete mode 100644 hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java diff --git a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java index 41f5db22..d71cf267 100644 --- a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java +++ b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java @@ -17,7 +17,7 @@ package cn.hippo4j.adapter.hystrix; -import cn.hutool.core.thread.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ScheduledExecutorService; @@ -36,8 +36,8 @@ public class ThreadPoolAdapterScheduler { public ThreadPoolAdapterScheduler() { scheduler = new ScheduledThreadPoolExecutor(2, new ThreadFactoryBuilder() - .setNamePrefix("threadPoolAdapter") - .setDaemon(true) + .prefix("threadPoolAdapter") + .daemon(true) .build()); } diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java index 70057a9d..c15cf7a6 100644 --- a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java @@ -24,12 +24,13 @@ import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; import cn.hippo4j.common.toolkit.CalculateUtil; import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; -import cn.hutool.core.date.DateUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.web.embedded.tomcat.TomcatWebServer; import org.springframework.boot.web.server.WebServer; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; @@ -138,7 +139,7 @@ public class TomcatWebThreadPoolHandler extends AbstractWebThreadPoolService { runStateInfo.setQueueRemainingCapacity(remainingCapacity); runStateInfo.setLargestPoolSize(largestPoolSize); runStateInfo.setCompletedTaskCount(completedTaskCount); - runStateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); + runStateInfo.setClientLastRefreshTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); runStateInfo.setTimestamp(System.currentTimeMillis()); String rejectedExecutionHandlerName = executor instanceof ThreadPoolExecutor ? ((ThreadPoolExecutor) executor).getRejectedExecutionHandler().getClass().getSimpleName() : tomcatThreadPoolExecutor.getRejectedExecutionHandler().getClass().getSimpleName(); diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java index 13038842..731b094a 100644 --- a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java @@ -24,7 +24,6 @@ import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; import cn.hippo4j.common.toolkit.CalculateUtil; import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; -import cn.hutool.core.date.DateUtil; import io.undertow.Undertow; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.web.embedded.undertow.UndertowServletWebServer; @@ -35,6 +34,8 @@ import org.xnio.XnioWorker; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Objects; import java.util.concurrent.Executor; @@ -128,7 +129,7 @@ public class UndertowWebThreadPoolHandler extends AbstractWebThreadPoolService { ? ((DynamicThreadPoolExecutor) fieldObject).getRejectCountNum() : -1L; stateInfo.setRejectCount(rejectCount); - stateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); + stateInfo.setClientLastRefreshTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); stateInfo.setTimestamp(System.currentTimeMillis()); return stateInfo; } diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java index b5442300..2cee24ef 100644 --- a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java @@ -20,10 +20,12 @@ package cn.hippo4j.adapter.web; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; import cn.hippo4j.common.toolkit.ByteConvertUtil; import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; -import cn.hutool.core.util.StrUtil; -import cn.hutool.system.RuntimeInfo; import lombok.extern.slf4j.Slf4j; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.MemoryUsage; + /** * Web thread pool run state handler. */ @@ -32,16 +34,20 @@ public class WebThreadPoolRunStateHandler extends AbstractThreadPoolRuntime { @Override public ThreadPoolRunStateInfo supplement(ThreadPoolRunStateInfo poolRunStateInfo) { - RuntimeInfo runtimeInfo = new RuntimeInfo(); - String memoryProportion = StrUtil.builder( - "已分配: ", - ByteConvertUtil.getPrintSize(runtimeInfo.getTotalMemory()), - " / 最大可用: ", - ByteConvertUtil.getPrintSize(runtimeInfo.getMaxMemory())).toString(); + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage(); + long used = heapMemoryUsage.getUsed(); + long max = heapMemoryUsage.getMax(); + String memoryProportion = new StringBuilder() + .append("已分配: ") + .append(ByteConvertUtil.getPrintSize(used)) + .append(" / 最大可用: ") + .append(ByteConvertUtil.getPrintSize(max)) + .toString(); poolRunStateInfo.setCurrentLoad(poolRunStateInfo.getCurrentLoad() + "%"); poolRunStateInfo.setPeakLoad(poolRunStateInfo.getPeakLoad() + "%"); poolRunStateInfo.setMemoryProportion(memoryProportion); - poolRunStateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(runtimeInfo.getFreeMemory())); + poolRunStateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(Math.subtractExact(max, used))); return poolRunStateInfo; } } diff --git a/hippo4j-auth/pom.xml b/hippo4j-auth/pom.xml index c44bcffb..9a2d1212 100644 --- a/hippo4j-auth/pom.xml +++ b/hippo4j-auth/pom.xml @@ -46,11 +46,6 @@ spring-boot-starter-web - - cn.hutool - hutool-all - - org.springframework.boot spring-boot-starter-security diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java index f6456ba8..0f93e918 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java @@ -21,8 +21,8 @@ import cn.hippo4j.auth.model.biz.user.JwtUser; import cn.hippo4j.auth.model.biz.user.LoginUser; import cn.hippo4j.auth.toolkit.JwtTokenUtil; import cn.hippo4j.auth.toolkit.ReturnT; +import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.web.base.Results; -import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.AuthenticationManager; @@ -34,7 +34,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import javax.servlet.FilterChain; -import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -100,7 +99,7 @@ public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilte Map maps = new HashMap(MAP_INITIAL_CAPACITY); maps.put("data", JwtTokenUtil.TOKEN_PREFIX + token); maps.put("roles", role.split(SPLIT_COMMA)); - response.getWriter().write(JSONUtil.toJsonStr(Results.success(maps))); + response.getWriter().write(JSONUtil.toJSONString(Results.success(maps))); } finally { rememberMe.remove(); } @@ -109,6 +108,6 @@ public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilte @Override protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException { response.setCharacterEncoding("UTF-8"); - response.getWriter().write(JSONUtil.toJsonStr(new ReturnT(-1, "Server Error"))); + response.getWriter().write(JSONUtil.toJSONString(new ReturnT(-1, "Server Error"))); } } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java index 7ec3c66b..3b6cf69e 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java @@ -20,10 +20,10 @@ package cn.hippo4j.auth.filter; import cn.hippo4j.auth.security.JwtTokenManager; import cn.hippo4j.auth.toolkit.JwtTokenUtil; import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.toolkit.UserContext; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.common.web.exception.ServiceException; -import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -61,7 +61,7 @@ public class JWTAuthorizationFilter extends BasicAuthenticationFilter { FilterChain chain) throws IOException, ServletException { // Token when verifying client interaction. String accessToken = request.getParameter(ACCESS_TOKEN); - if (StrUtil.isNotBlank(accessToken)) { + if (StringUtil.isNotBlank(accessToken)) { tokenManager.validateToken(accessToken); Authentication authentication = this.tokenManager.getAuthentication(accessToken); SecurityContextHolder.getContext().setAuthentication(authentication); diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java index 84160cc9..17f52aaa 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java @@ -17,7 +17,7 @@ package cn.hippo4j.auth.security; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.StringUtil; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -64,7 +64,7 @@ public class JwtTokenManager { Claims claims = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody(); List authorities = AuthorityUtils .commaSeparatedStringToAuthorityList((String) claims.get(AUTHORITIES_KEY)); - User principal = new User(claims.getSubject(), StrUtil.EMPTY, authorities); - return new UsernamePasswordAuthenticationToken(principal, StrUtil.EMPTY, authorities); + User principal = new User(claims.getSubject(), StringUtil.EMPTY, authorities); + return new UsernamePasswordAuthenticationToken(principal, StringUtil.EMPTY, authorities); } } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java index b53b1c6a..83787200 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java @@ -21,8 +21,8 @@ import cn.hippo4j.auth.mapper.PermissionMapper; import cn.hippo4j.auth.model.biz.permission.PermissionQueryPageReqDTO; import cn.hippo4j.auth.model.biz.permission.PermissionRespDTO; import cn.hippo4j.auth.service.PermissionService; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.BeanUtil; +import cn.hippo4j.common.toolkit.StringUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -44,8 +44,7 @@ public class PermissionServiceImpl implements PermissionService { public IPage listPermission(int pageNo, int pageSize) { PermissionQueryPageReqDTO queryPage = new PermissionQueryPageReqDTO(pageNo, pageSize); IPage selectPage = permissionMapper.selectPage(queryPage, null); - - return selectPage.convert(each -> BeanUtil.toBean(each, PermissionRespDTO.class)); + return selectPage.convert(each -> BeanUtil.convert(each, PermissionRespDTO.class)); } @Override @@ -68,9 +67,9 @@ public class PermissionServiceImpl implements PermissionService { @Override public void deletePermission(String role, String resource, String action) { LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(PermissionInfo.class) - .eq(StrUtil.isNotBlank(role), PermissionInfo::getRole, role) - .eq(StrUtil.isNotBlank(resource), PermissionInfo::getResource, resource) - .eq(StrUtil.isNotBlank(action), PermissionInfo::getAction, action); + .eq(StringUtil.isNotBlank(role), PermissionInfo::getRole, role) + .eq(StringUtil.isNotBlank(resource), PermissionInfo::getResource, resource) + .eq(StringUtil.isNotBlank(action), PermissionInfo::getAction, action); permissionMapper.delete(updateWrapper); } } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java index dd45b56c..b298bb70 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java @@ -22,9 +22,9 @@ import cn.hippo4j.auth.model.biz.role.RoleQueryPageReqDTO; import cn.hippo4j.auth.model.biz.role.RoleRespDTO; import cn.hippo4j.auth.service.PermissionService; import cn.hippo4j.auth.service.RoleService; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.BeanUtil; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.StringUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -51,7 +51,7 @@ public class RoleServiceImpl implements RoleService { public IPage listRole(int pageNo, int pageSize) { RoleQueryPageReqDTO queryPage = new RoleQueryPageReqDTO(pageNo, pageSize); IPage selectPage = roleMapper.selectPage(queryPage, null); - return selectPage.convert(each -> BeanUtil.toBean(each, RoleRespDTO.class)); + return selectPage.convert(each -> BeanUtil.convert(each, RoleRespDTO.class)); } @Override @@ -70,14 +70,14 @@ public class RoleServiceImpl implements RoleService { @Override public void deleteRole(String role, String userName) { - List roleStrList = CollUtil.toList(role); - if (StrUtil.isBlank(role)) { + List roleStrList = CollectionUtil.toList(role); + if (StringUtil.isBlank(role)) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(RoleInfo.class).eq(RoleInfo::getUserName, userName); roleStrList = roleMapper.selectList(queryWrapper).stream().map(RoleInfo::getRole).collect(Collectors.toList()); } LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(RoleInfo.class) - .eq(StrUtil.isNotBlank(role), RoleInfo::getRole, role) - .eq(StrUtil.isNotBlank(userName), RoleInfo::getUserName, userName); + .eq(StringUtil.isNotBlank(role), RoleInfo::getRole, role) + .eq(StringUtil.isNotBlank(userName), RoleInfo::getUserName, userName); roleMapper.delete(updateWrapper); roleStrList.forEach(each -> permissionService.deletePermission(each, "", "")); } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java index f94df6a2..b500fa06 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java @@ -24,10 +24,9 @@ import cn.hippo4j.auth.model.biz.user.UserReqDTO; import cn.hippo4j.auth.model.biz.user.UserRespDTO; import cn.hippo4j.auth.service.RoleService; import cn.hippo4j.auth.service.UserService; +import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.exception.ServiceException; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -59,7 +58,7 @@ public class UserServiceImpl implements UserService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class) .eq(StringUtil.isNotBlank(reqDTO.getUserName()), UserInfo::getUserName, reqDTO.getUserName()); IPage selectPage = userMapper.selectPage(reqDTO, queryWrapper); - return selectPage.convert(each -> BeanUtil.toBean(each, UserRespDTO.class)); + return selectPage.convert(each -> BeanUtil.convert(each, UserRespDTO.class)); } @Override @@ -71,16 +70,16 @@ public class UserServiceImpl implements UserService { throw new RuntimeException("用户名重复"); } reqDTO.setPassword(bCryptPasswordEncoder.encode(reqDTO.getPassword())); - UserInfo insertUser = BeanUtil.toBean(reqDTO, UserInfo.class); + UserInfo insertUser = BeanUtil.convert(reqDTO, UserInfo.class); userMapper.insert(insertUser); } @Override public void updateUser(UserReqDTO reqDTO) { - if (StrUtil.isNotBlank(reqDTO.getPassword())) { + if (StringUtil.isNotBlank(reqDTO.getPassword())) { reqDTO.setPassword(bCryptPasswordEncoder.encode(reqDTO.getPassword())); } - UserInfo updateUser = BeanUtil.toBean(reqDTO, UserInfo.class); + UserInfo updateUser = BeanUtil.convert(reqDTO, UserInfo.class); LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserInfo.class) .eq(UserInfo::getUserName, reqDTO.getUserName()); userMapper.update(updateUser, updateWrapper); @@ -108,7 +107,7 @@ public class UserServiceImpl implements UserService { Wrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getUserName, reqDTO.getUserName()); UserInfo userInfo = userMapper.selectOne(queryWrapper); UserRespDTO respUser = Optional.ofNullable(userInfo) - .map(each -> BeanUtil.toBean(each, UserRespDTO.class)) + .map(each -> BeanUtil.convert(each, UserRespDTO.class)) .orElseThrow(() -> new ServiceException("查询无此用户, 可以尝试清空缓存或退出登录.")); return respUser; } diff --git a/hippo4j-common/pom.xml b/hippo4j-common/pom.xml index 44b46e4d..320c0fba 100644 --- a/hippo4j-common/pom.xml +++ b/hippo4j-common/pom.xml @@ -61,11 +61,6 @@ spring-boot-starter-json - - cn.hutool - hutool-all - - org.springframework.boot spring-boot-starter-test @@ -76,6 +71,11 @@ com.github.ben-manes.caffeine caffeine + + + com.github.dozermapper + dozer-core + diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java b/hippo4j-common/src/main/java/cn/hippo4j/common/design/builder/ThreadFactoryBuilder.java similarity index 97% rename from hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/design/builder/ThreadFactoryBuilder.java index ff78da04..6a9323fb 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/design/builder/ThreadFactoryBuilder.java @@ -15,9 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.executor.support; - -import cn.hippo4j.common.design.builder.Builder; +package cn.hippo4j.common.design.builder; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java index 1bff8abf..327152a0 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java @@ -91,6 +91,16 @@ public class Assert { } } + public static void notBlank(String str, String message) { + if (StringUtil.isBlank(str)) { + throw new IllegalArgumentException(message); + } + } + + public static void notBlank(String str) { + notBlank(str, "[Assertion failed] - this string must not be blank"); + } + public static void hasText(String text, String message) { if (!StringUtils.hasText(text)) { throw new IllegalArgumentException(message); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java new file mode 100644 index 00000000..523f56a9 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BeanUtil.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hippo4j.common.web.exception.IllegalException; +import com.github.dozermapper.core.DozerBeanMapperBuilder; +import com.github.dozermapper.core.Mapper; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; + +import java.beans.IntrospectionException; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; +import java.util.*; + +/** + * Bean util. + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class BeanUtil { + + protected static Mapper BEAN_MAPPER_BUILDER; + + static { + BEAN_MAPPER_BUILDER = DozerBeanMapperBuilder.buildDefault(); + } + + public static T convert(S source, Class clazz) { + return Optional.ofNullable(source) + .map(each -> BEAN_MAPPER_BUILDER.map(each, clazz)) + .orElse(null); + } + + public static T convert(S source, T target) { + Optional.ofNullable(source) + .ifPresent(each -> BEAN_MAPPER_BUILDER.map(each, target)); + return target; + } + + public static List convert(List sources, Class clazz) { + return Optional.ofNullable(sources) + .map(each -> { + List targetList = new ArrayList(each.size()); + each.forEach(item -> targetList.add(BEAN_MAPPER_BUILDER.map(item, clazz))); + return targetList; + }) + .orElse(null); + } + + public static Set convert(Set sources, Class clazz) { + return Optional.ofNullable(sources) + .map(each -> { + Set targetSize = new HashSet(each.size()); + each.forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz))); + return targetSize; + }) + .orElse(null); + } + + public static T mapToBean(Map map, Class clazz, boolean toCamelCase) { + if (clazz == null) { + return null; + } + try { + T newInstance = clazz.newInstance(); + return mapToBean(map, newInstance, toCamelCase); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalException("do not create instance for " + clazz.getName(), e); + } + } + + /** + * map to bean + * + * @param map map + * @param bean obj bean + * @param toCamelCase format to camel case + * @param bean type + * @return T + */ + public static T mapToBean(Map map, T bean, boolean toCamelCase) { + if (bean == null) { + return null; + } + if (map.isEmpty()) { + return bean; + } + Class clazz = bean.getClass(); + map.forEach((s, o) -> { + String name = toCamelCase ? StringUtil.toCamelCase(s, StringUtil.UNDERLINE) : s; + Method method = setter(clazz, name); + if (method != null) { + ReflectUtil.invoke(bean, method, o); + } + }); + return bean; + } + + /** + * getter for properties + * + * @param o obj + * @param propertiesName name + * @return Method for get + */ + public static Method getter(Class o, String propertiesName) { + if (o == null) { + return null; + } + try { + PropertyDescriptor descriptor = new PropertyDescriptor(propertiesName, o); + return descriptor.getReadMethod(); + } catch (IntrospectionException e) { + throw new IllegalException("not find getter for" + propertiesName + "in" + o.getName(), e); + } + } + + /** + * setter for properties + * + * @param o obj + * @param propertiesName name + * @return Method for set + */ + public static Method setter(Class o, String propertiesName) { + if (o == null) { + return null; + } + try { + PropertyDescriptor descriptor = new PropertyDescriptor(propertiesName, o); + return descriptor.getWriteMethod(); + } catch (IntrospectionException e) { + throw new IllegalException("not find setter for" + propertiesName + "in" + o.getName(), e); + } + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java index 7d98a0fa..8885aab5 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java @@ -17,8 +17,6 @@ package cn.hippo4j.common.toolkit; -import cn.hutool.core.util.StrUtil; - import java.util.HashSet; import java.util.Set; @@ -42,7 +40,7 @@ public class BooleanUtil { * @return */ public static boolean toBoolean(String valueStr) { - if (StrUtil.isNotBlank(valueStr)) { + if (StringUtil.isNotBlank(valueStr)) { valueStr = valueStr.trim().toLowerCase(); return TREE_SET.contains(valueStr); } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java index 0177dca4..baa5a02f 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java @@ -18,6 +18,7 @@ package cn.hippo4j.common.toolkit; import java.util.*; +import java.util.stream.Collectors; /** * Collection util. @@ -121,6 +122,21 @@ public class CollectionUtil { return !isEmpty(collection); } + /** + * to list + * + * @param ts elements + * @param type + * @return List + */ + public static List toList(T... ts) { + if (ts == null || ts.length == 0) { + return new ArrayList<>(); + } + return Arrays.stream(ts) + .collect(Collectors.toList()); + } + /** * reference google guava * diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/DateUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/DateUtil.java new file mode 100644 index 00000000..7db6d7c5 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/DateUtil.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.common.toolkit; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.util.Date; +import java.util.SimpleTimeZone; +import java.util.TimeZone; + +/** + * date and time util + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class DateUtil { + + /** + * get time zone for this JVM + */ + private static final TimeZone TIME_ZONE = TimeZone.getDefault(); + + public static final String NORM_DATE_PATTERN = "yyyy-MM-dd"; + + public static final String NORM_TIME_PATTERN = "HH:mm:ss"; + + public static final String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + + /** + * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT + * represented by this Date object. + * + * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT + * represented by this date. + */ + public static long getTime(LocalDateTime date) { + return getTime(date, TIME_ZONE.toZoneId()); + } + + public static long getTime(LocalDateTime date, ZoneId zoneId) { + return date.atZone(zoneId).toInstant().toEpochMilli(); + + } + + /** + * modify format to date + * + * @param date date + * @param normTimePattern PATTERN + * @return String + */ + public static String format(Date date, String normTimePattern) { + SimpleDateFormat zoneFormat = new SimpleDateFormat(normTimePattern); + return zoneFormat.format(date); + + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java index 6361c767..1e7d971f 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java @@ -17,12 +17,15 @@ package cn.hippo4j.common.toolkit; +import cn.hippo4j.common.web.exception.IllegalException; import lombok.SneakyThrows; import org.springframework.core.io.ClassPathResource; -import java.io.BufferedInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; +import java.io.*; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; /** * File util; @@ -48,4 +51,38 @@ public class FileUtil { } return resultReadStr; } + + public static List readLines(String path, Charset charset) { + List strList = new ArrayList<>(); + InputStreamReader inputStreamReader = null; + BufferedReader bufferedReader = null; + ClassPathResource classPathResource = new ClassPathResource(path); + try { + inputStreamReader = new InputStreamReader(classPathResource.getInputStream(), charset); + bufferedReader = new BufferedReader(inputStreamReader); + String line; + while ((line = bufferedReader.readLine()) != null) { + strList.add(line); + } + } catch (IOException e) { + e.printStackTrace(); + throw new IllegalException("file read error"); + } finally { + if (inputStreamReader != null) { + try { + inputStreamReader.close(); + } catch (IOException e) { + throw new IllegalException("file read error"); + } + } + if (bufferedReader != null) { + try { + bufferedReader.close(); + } catch (IOException e) { + throw new IllegalException("file read error"); + } + } + } + return strList; + } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/IdUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/IdUtil.java new file mode 100644 index 00000000..e9bf9a50 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/IdUtil.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.common.toolkit; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * id and uuid util,{@link UUID} + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class IdUtil { + + /** + * get a random UUID + * + * @return UUID + */ + public static String randomUUID() { + return toString(UUID.randomUUID(), false); + } + + /** + * get a simple random UUID + * + * @return a simple UUID + */ + public static String simpleUUID() { + return toString(UUID.randomUUID(), true); + } + + /** + * toString + * + * @param uuid UUID + * @return UUID String + */ + public static String toString(UUID uuid, boolean isSimple) { + long mostSigBits = uuid.getMostSignificantBits(); + long leastSigBits = uuid.getLeastSignificantBits(); + if (isSimple) { + return (digits(mostSigBits >> 32, 8) + + digits(mostSigBits >> 16, 4) + + digits(mostSigBits, 4) + + digits(leastSigBits >> 48, 4) + + digits(leastSigBits, 12)); + } else { + return (digits(mostSigBits >> 32, 8) + "-" + + digits(mostSigBits >> 16, 4) + "-" + + digits(mostSigBits, 4) + "-" + + digits(leastSigBits >> 48, 4) + "-" + + digits(leastSigBits, 12)); + } + } + + /** + * Returns val represented by the specified number of hex digits.
+ * {@link UUID#digits(long, int)} + * + * @param val value + * @param digits position + * @return hex value + */ + private static String digits(long val, int digits) { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java index fdf529f9..3be85745 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java @@ -41,7 +41,7 @@ public class MessageConvert { MessageWrapper wrapper = new MessageWrapper(); wrapper.setResponseClass(message.getClass()); wrapper.setMessageType(message.getMessageType()); - List> messageMapList = new ArrayList(); + List> messageMapList = new ArrayList<>(); List messages = message.getMessages(); messages.forEach(each -> { String eachVal = JSONUtil.toJSONString(each); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java index faca0979..4683ab3c 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java @@ -17,22 +17,27 @@ package cn.hippo4j.common.toolkit; -import cn.hutool.core.convert.Convert; -import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.util.ClassUtil; +import cn.hippo4j.common.web.exception.IllegalException; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadPoolExecutor; /** * Reflect util. */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class ReflectUtil { - private static final Map, Field[]> FIELDS_CACHE = new ConcurrentHashMap(); + private static final Map, Field[]> FIELDS_CACHE = new ConcurrentHashMap<>(); public static Object getFieldValue(Object obj, String fieldName) { if (null == obj || StringUtil.isBlank(fieldName)) { @@ -55,7 +60,7 @@ public class ReflectUtil { result = field.get(obj); } catch (IllegalAccessException e) { String exceptionMsg = String.format("IllegalAccess for %s.%s", field.getDeclaringClass(), field.getName()); - throw new RuntimeException(exceptionMsg, e); + throw new IllegalException(exceptionMsg, e); } return result; } @@ -69,7 +74,7 @@ public class ReflectUtil { public static Field getField(Class beanClass, String name) throws SecurityException { final Field[] fields = getFields(beanClass); - return ArrayUtil.firstMatch((field) -> name.equals(getFieldName(field)), fields); + return ArrayUtil.firstMatch(field -> name.equals(getFieldName(field)), fields); } public static Field[] getFields(Class beanClass) throws SecurityException { @@ -109,32 +114,114 @@ public class ReflectUtil { return field.getName(); } - public static void setFieldValue(Object obj, String fieldName, Object value) throws UtilException { - cn.hutool.core.lang.Assert.notNull(obj); - cn.hutool.core.lang.Assert.notBlank(fieldName); + public static void setFieldValue(Object obj, String fieldName, Object value) throws IllegalException { + Assert.notNull(obj); + Assert.notBlank(fieldName); final Field field = getField((obj instanceof Class) ? (Class) obj : obj.getClass(), fieldName); - cn.hutool.core.lang.Assert.notNull(field, "Field [{}] is not exist in [{}]", fieldName, obj.getClass().getName()); + Assert.notNull(field, "Field [" + fieldName + "] is not exist in [" + obj.getClass().getName() + "]"); setFieldValue(obj, field, value); } - public static void setFieldValue(Object obj, Field field, Object value) throws UtilException { - cn.hutool.core.lang.Assert.notNull(field, "Field in [{}] not exist !", obj); + public static void setFieldValue(Object obj, Field field, Object value) throws IllegalException { + Assert.notNull(field, "Field in [" + obj + "] not exist !"); final Class fieldType = field.getType(); if (null != value) { if (!fieldType.isAssignableFrom(value.getClass())) { - final Object targetValue = Convert.convert(fieldType, value); + final Object targetValue = cast(fieldType, value); if (null != targetValue) { value = targetValue; } } } else { - value = ClassUtil.getDefaultValue(fieldType); + value = getDefaultValue(fieldType); } setAccessible(field); try { field.set(obj instanceof Class ? null : obj, value); } catch (IllegalAccessException e) { - throw new UtilException(e, "IllegalAccess for {}.{}", obj, field.getName()); + throw new IllegalException("IllegalAccess for " + obj + "." + field.getName(), e); + } + } + + /** + * find the method associated with the method name + * + * @param clazz the class + * @param methodName retrieves the method name + * @param arguments matched parameters class + * @return find method + */ + public static Method getMethodByName(Class clazz, String methodName, Class... arguments) { + try { + if (Objects.nonNull(clazz) && Objects.nonNull(methodName)) { + return clazz.getMethod(methodName, arguments); + } + } catch (NoSuchMethodException e) { + throw new IllegalException(e); + } + return null; + } + + /** + * Cast the value to the type
+ * If a ClassCastException occurs, return null + * + * @param clazz Cast class + * @param value The cast value + * @return The value after the cast is completed + */ + public static Object cast(Class clazz, Object value) { + try { + return clazz.cast(value); + } catch (ClassCastException e) { + return null; + } + } + + /** + * the default value is obtained if it is a primitive type, and NULL if it is not + * + * @param clazz clazz + * @return default value + */ + public static Object getDefaultValue(Class clazz) { + if (Objects.isNull(clazz) || !clazz.isPrimitive()) { + return null; + } + if (long.class.isAssignableFrom(clazz)) { + return 0L; + } else if (int.class.isAssignableFrom(clazz)) { + return 0; + } else if (short.class.isAssignableFrom(clazz)) { + return (short) 0; + } else if (char.class.isAssignableFrom(clazz)) { + return (char) 0; + } else if (byte.class.isAssignableFrom(clazz)) { + return (byte) 0; + } else if (double.class.isAssignableFrom(clazz)) { + return 0D; + } else if (float.class.isAssignableFrom(clazz)) { + return 0f; + } else if (boolean.class.isAssignableFrom(clazz)) { + return false; + } + return null; + } + + /** + * invoke + * + * @param obj the obj + * @param method the method + * @param arguments parameters + * @return result for zhe method + */ + @SuppressWarnings("unchecked") + public static T invoke(Object obj, Method method, Object... arguments) { + try { + return (T) method.invoke(obj, arguments); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new IllegalException(e); } } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java index fa36a77a..03633e46 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java @@ -29,7 +29,7 @@ import java.util.function.Supplier; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class Singleton { - private static final ConcurrentHashMap SINGLE_OBJECT_POOL = new ConcurrentHashMap(); + private static final ConcurrentHashMap SINGLE_OBJECT_POOL = new ConcurrentHashMap<>(); /** * Get a singleton object by key. diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java index 74cccf9d..553d2acb 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java @@ -17,6 +17,9 @@ package cn.hippo4j.common.toolkit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * String util. */ @@ -192,4 +195,84 @@ public class StringUtil { return sb.toString(); } + /** + * to camel case + * + * @param str CharSequence + * @param symbol symbol + * @return toCamelCase String + */ + public static String toCamelCase(CharSequence str, char symbol) { + if (null == str || str.length() == 0) { + return null; + } + int length = str.length(); + StringBuilder sb = new StringBuilder(length); + boolean upperCase = false; + for (int i = 0; i < length; ++i) { + char c = str.charAt(i); + if (c == symbol) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * Replace a portion of the string, replacing all found + * + * @param str A string to operate on + * @param searchStr The replaced string + * @param replaceStr The replaced string + * @return Replace the result + */ + public static String replace(String str, String searchStr, String replaceStr) { + return Pattern + .compile(searchStr, Pattern.LITERAL) + .matcher(str) + .replaceAll(Matcher.quoteReplacement(replaceStr)); + } + + /** + * Tests if this string starts with the specified prefix. + * + * @param str this str + * @param prefix the suffix + * @return Whether the prefix exists + */ + public static boolean startWith(String str, String prefix) { + if (isEmpty(str)) { + return false; + } + return str.startsWith(prefix); + } + + /** + * get the string before the delimiter + * + * @param str string + * @param symbol separator + * @return String + */ + public static String subBefore(String str, String symbol) { + if (isEmpty(str) || symbol == null) { + return str; + } + if (symbol.isEmpty()) { + return EMPTY; + } + int pos = str.indexOf(symbol); + if (-1 == pos) { + return str; + } + if (0 == pos) { + return EMPTY; + } + return str.substring(0, pos); + } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java index 67df6909..22c1a286 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java @@ -28,7 +28,7 @@ import java.util.Optional; */ public class UserContext { - private static final ThreadLocal USER_THREAD_LOCAL = new ThreadLocal(); + private static final ThreadLocal USER_THREAD_LOCAL = new ThreadLocal<>(); public static void setUserInfo(String username, String userRole) { USER_THREAD_LOCAL.set(new User(username, userRole)); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/IllegalException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/IllegalException.java new file mode 100644 index 00000000..86250b4a --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/IllegalException.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.common.web.exception; + +/** + * A generic exception to handle illegal operations + */ +public class IllegalException extends RuntimeException { + + private static final long serialVersionUID = 8247610319171014183L; + + public IllegalException() { + super(); + } + + public IllegalException(String message) { + super(message); + } + + public IllegalException(Throwable e) { + super(e.getMessage(), e); + } + + public IllegalException(String message, Throwable throwable) { + super(message, throwable); + } + + public IllegalException(String message, Throwable throwable, boolean enableSuppression, boolean writableStackTrace) { + super(message, throwable, enableSuppression, writableStackTrace); + } + +} diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java similarity index 67% rename from hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java rename to hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java index 2c393a03..05caeaf0 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/BeanUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BeanUtilTest.java @@ -15,18 +15,16 @@ * limitations under the License. */ -package cn.hippo4j.config.toolkit; +package cn.hippo4j.common.toolkit; -import cn.hippo4j.common.toolkit.Assert; import com.github.dozermapper.core.converters.ConversionException; import lombok.*; +import org.junit.Assert; import org.junit.Test; +import java.lang.reflect.Method; import java.util.*; -/** - * BeanUtil Test - */ public class BeanUtilTest { @Test @@ -38,10 +36,10 @@ public class BeanUtilTest { person.setAddress("hippo4j.cn"); person.setSize(999); final Map convert = BeanUtil.convert(person, Map.class); - Assert.isTrue(Objects.equals("Hippo4j", convert.get("name"))); - Assert.isTrue(Objects.equals(1, convert.get("age"))); - Assert.isTrue(Objects.equals("hippo4j.cn", convert.get("address"))); - Assert.isTrue(Objects.equals(999, convert.get("size"))); + Assert.assertEquals("Hippo4j", convert.get("name")); + Assert.assertEquals(1, convert.get("age")); + Assert.assertEquals("hippo4j.cn", convert.get("address")); + Assert.assertEquals(999, convert.get("size")); } @Test @@ -53,10 +51,10 @@ public class BeanUtilTest { map.put("address", "hippo4j.cn"); map.put("size", 999); final Person person = BeanUtil.convert(map, Person.class); - Assert.isTrue(Objects.equals("Hippo4j", person.getName())); - Assert.isTrue(Objects.equals(1, person.getAge())); - Assert.isTrue(Objects.equals("hippo4j.cn", person.getAddress())); - Assert.isTrue(Objects.equals(999, person.getSize())); + Assert.assertEquals("Hippo4j", person.getName()); + Assert.assertEquals(1, person.getAge()); + Assert.assertEquals("hippo4j.cn", person.getAddress()); + Assert.assertEquals(999, (int) person.getSize()); } @Test @@ -67,7 +65,7 @@ public class BeanUtilTest { list.add(Person.builder().name("three").age(3).build()); final List persons = BeanUtil.convert(list, PersonVo.class); - Assert.isTrue(Objects.equals(list.size(), persons.size())); + Assert.assertEquals(list.size(), persons.size()); } @Test @@ -78,7 +76,7 @@ public class BeanUtilTest { sets.add(Person.builder().name("three").age(3).build()); final Set persons = BeanUtil.convert(sets, PersonVo.class); - Assert.isTrue(Objects.equals(sets.size(), persons.size())); + Assert.assertEquals(sets.size(), persons.size()); } @Test @@ -88,10 +86,10 @@ public class BeanUtilTest { person.setName("Hippo4j"); final Map convert = BeanUtil.convert(person, Map.class); - Assert.isTrue(Objects.equals("Hippo4j", convert.get("name"))); + Assert.assertEquals("Hippo4j", convert.get("name")); // static属性应被忽略 - Assert.isTrue(!convert.containsKey("STATIC_NAME")); + Assert.assertFalse(convert.containsKey("STATIC_NAME")); } /** @@ -106,6 +104,28 @@ public class BeanUtilTest { // ----------------------------------------------------------------------------------------------------------------- + @Test + public void testMapToBean() { + Map map = new HashMap<>(); + map.put("name", "Test"); + map.put("status_code", 12); + Customer customer = BeanUtil.mapToBean(map, Customer.class, true); + Assert.assertEquals("Test", customer.getName()); + Assert.assertEquals(Integer.valueOf(12), customer.getStatusCode()); + } + + @Test + public void testGetter() { + Method name = BeanUtil.getter(Customer.class, "name"); + Assert.assertEquals("getName", name.getName()); + } + + @Test + public void testSetter() { + Method name = BeanUtil.setter(Customer.class, "name"); + Assert.assertEquals("setName", name.getName()); + } + @Getter @Setter @Builder @@ -127,4 +147,20 @@ public class BeanUtilTest { private String name; private int age; } + + @Getter + @Setter + static class Customer { + + String name; + Integer statusCode; + } + + @Getter + @Setter + static class PreCustomer { + + String name; + Integer statusCode; + } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.java index e8112b89..85ff30f5 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.java @@ -17,19 +17,20 @@ package cn.hippo4j.common.toolkit; +import org.junit.Assert; import org.junit.Test; public class BooleanUtilTest { @Test public void assertToBoolean() { - Assert.isTrue(BooleanUtil.toBoolean("true")); - Assert.isTrue(BooleanUtil.toBoolean("yes")); - Assert.isTrue(BooleanUtil.toBoolean("1")); + Assert.assertTrue(BooleanUtil.toBoolean("true")); + Assert.assertTrue(BooleanUtil.toBoolean("yes")); + Assert.assertTrue(BooleanUtil.toBoolean("1")); } @Test public void assertIsTrue() { - Assert.isTrue(BooleanUtil.isTrue(true)); + Assert.assertTrue(BooleanUtil.isTrue(true)); } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.java index 75b5edf4..b3b15b2e 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.java @@ -18,6 +18,10 @@ package cn.hippo4j.common.toolkit; import org.junit.Test; +import org.junit.Assert; + +import java.nio.charset.StandardCharsets; +import java.util.List; public class FileUtilTest { @@ -25,7 +29,7 @@ public class FileUtilTest { public void assertReadUtf8String() { String testFilePath = "test/test_utf8.txt"; String contentByFileUtil = FileUtil.readUtf8String(testFilePath); - Assert.notEmpty(contentByFileUtil); + Assert.assertFalse(contentByFileUtil.isEmpty()); } @Test @@ -36,6 +40,13 @@ public class FileUtilTest { "empty line next" + linebreaks; String testFilePath = "test/test_utf8.txt"; String contentByFileUtil = FileUtil.readUtf8String(testFilePath); - Assert.isTrue(testText.equals(contentByFileUtil)); + Assert.assertTrue(testText.equals(contentByFileUtil)); + } + + @Test + public void assertReadLines() { + String testFilePath = "test/test_utf8.txt"; + List readLines = FileUtil.readLines(testFilePath, StandardCharsets.UTF_8); + Assert.assertEquals(3, readLines.size()); } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/IdUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/IdUtilTest.java new file mode 100644 index 00000000..79700086 --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/IdUtilTest.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.hippo4j.common.toolkit; + +import org.junit.Assert; +import org.junit.Test; + +public class IdUtilTest { + + @Test + public void randomUUIDTest() { + String randomUUID = IdUtil.randomUUID(); + Assert.assertNotNull(randomUUID); + } + + @Test + public void simpleUUIDTest() { + String simpleUUID = IdUtil.simpleUUID(); + Assert.assertNotNull(simpleUUID); + Assert.assertFalse(simpleUUID.contains("-")); + } +} \ No newline at end of file diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java index 8f065ab8..104155be 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java @@ -18,10 +18,12 @@ package cn.hippo4j.common.toolkit; import lombok.Getter; +import lombok.Setter; import org.junit.Test; +import org.junit.Assert; import java.lang.reflect.Field; -import java.util.Objects; +import java.lang.reflect.Method; public class ReflectUtilTest { @@ -29,10 +31,10 @@ public class ReflectUtilTest { public void getFieldValueTest() { TestSubClass testSubClass = new TestSubClass(); Object privateField = ReflectUtil.getFieldValue(testSubClass, "privateField"); - Assert.isTrue(Objects.equals("privateField", privateField)); + Assert.assertEquals("privateField", privateField); Object field = ReflectUtil.getFieldValue(testSubClass, "field"); - Assert.isTrue(Objects.equals("field", field)); + Assert.assertEquals("field", field); } @@ -42,57 +44,99 @@ public class ReflectUtilTest { Field privateField = ReflectUtil.getField(TestSubClass.class, "privateField"); Object privateFieldVal = ReflectUtil.getFieldValue(testSubClass, privateField); - Assert.isTrue(Objects.equals("privateField", privateFieldVal)); + Assert.assertEquals("privateField", privateFieldVal); } @Test public void getFieldTest() { Field privateField = ReflectUtil.getField(TestSubClass.class, "privateField"); - Assert.notNull(privateField); + Assert.assertNotNull(privateField); Field field = ReflectUtil.getField(TestSubClass.class, "field"); - Assert.notNull(field); + Assert.assertNotNull(field); } @Test public void getFieldsTest() { Field[] fields = ReflectUtil.getFields(TestSubClass.class); - Assert.isTrue(Objects.equals(4, fields.length)); + Assert.assertEquals(4, fields.length); } @Test public void getFieldsDirectlyTest() { Field[] fields = ReflectUtil.getFieldsDirectly(TestSubClass.class, false); - Assert.isTrue(Objects.equals(2, fields.length)); + Assert.assertEquals(2, fields.length); fields = ReflectUtil.getFieldsDirectly(TestSubClass.class, true); - Assert.isTrue(Objects.equals(4, fields.length)); + Assert.assertEquals(4, fields.length); } @Test public void getFieldNameTest() { Field privateField = ReflectUtil.getField(TestSubClass.class, "privateField"); String fieldName = ReflectUtil.getFieldName(privateField); - Assert.notNull(fieldName); + Assert.assertNotNull(fieldName); Field subField = ReflectUtil.getField(TestSubClass.class, "subField"); String subfieldName = ReflectUtil.getFieldName(subField); - Assert.notNull(subfieldName); + Assert.assertNotNull(subfieldName); } @Test public void setFieldValueTest() { TestClass testClass = new TestClass(); ReflectUtil.setFieldValue(testClass, "field", "fieldVal"); - Assert.isTrue(Objects.equals("fieldVal", testClass.getField())); + Assert.assertEquals("fieldVal", testClass.getField()); Field privateField = ReflectUtil.getField(TestSubClass.class, "privateField"); ReflectUtil.setFieldValue(testClass, privateField, "privateFieldVal"); - Assert.isTrue(Objects.equals("privateFieldVal", testClass.getPrivateField())); + Assert.assertEquals("privateFieldVal", testClass.getPrivateField()); } + @Test + public void castTest() { + TestClass testClass = new TestSubClass(); + Object cast = ReflectUtil.cast(TestSubClass.class, testClass); + Assert.assertTrue(cast instanceof TestSubClass); + } + + @Test + public void getDefaultValueTest() { + Object defaultValue = ReflectUtil.getDefaultValue(Long.class); + Assert.assertNull(defaultValue); + Object primitiveValueLong = ReflectUtil.getDefaultValue(long.class); + Assert.assertEquals(0L, primitiveValueLong); + Object primitiveValueInt = ReflectUtil.getDefaultValue(int.class); + Assert.assertEquals(0, primitiveValueInt); + Object primitiveValueFloat = ReflectUtil.getDefaultValue(float.class); + Assert.assertEquals(0f, primitiveValueFloat); + Object primitiveValueShort = ReflectUtil.getDefaultValue(short.class); + Assert.assertEquals((short) 0, primitiveValueShort); + Object primitiveValueChar = ReflectUtil.getDefaultValue(char.class); + Assert.assertEquals((char) 0, primitiveValueChar); + Object primitiveValueDouble = ReflectUtil.getDefaultValue(double.class); + Assert.assertEquals(0D, primitiveValueDouble); + Object primitiveValueBoolean = ReflectUtil.getDefaultValue(boolean.class); + Assert.assertEquals(false, primitiveValueBoolean); + } + + @Test + public void getMethodByNameTest() { + Method field = ReflectUtil.getMethodByName(TestClass.class, "setPrivateField", String.class); + Assert.assertNotNull(field); + } + + @Test + public void invokeTest() { + TestClass testClass = new TestClass(); + Method method = ReflectUtil.getMethodByName(TestClass.class, "getPrivateField"); + String invoke = ReflectUtil.invoke(testClass, method); + Assert.assertEquals(invoke, "privateField"); + } + @Getter + @Setter static class TestClass { private String privateField; diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java index 7c0067ff..d2f9173c 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/StringUtilTest.java @@ -90,4 +90,11 @@ public class StringUtilTest { String s = StringUtil.toSymbolCase(string, StringUtil.UNDERLINE); Assert.isTrue(Objects.equals(s, "str")); } + + @Test + public void toCamelCase() { + String string = "str_str"; + String s = StringUtil.toCamelCase(string, StringUtil.UNDERLINE); + Assert.isTrue(Objects.equals(s, "strStr")); + } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ThreadUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ThreadUtilTest.java index e428a733..88c2890a 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ThreadUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ThreadUtilTest.java @@ -18,8 +18,7 @@ package cn.hippo4j.common.toolkit; import org.junit.Test; - -import static org.junit.Assert.assertTrue; +import org.junit.Assert; public class ThreadUtilTest { @@ -32,11 +31,11 @@ public class ThreadUtilTest { final Thread result = ThreadUtil.newThread(runnable, "name", false); // Verify the results - Assert.notNull(result); + Assert.assertNotNull(result); } @Test public void testSleep() { - assertTrue(ThreadUtil.sleep(0L)); + Assert.assertTrue(ThreadUtil.sleep(0L)); } } diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/UserContextTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/UserContextTest.java index 83543573..a361d139 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/UserContextTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/UserContextTest.java @@ -17,11 +17,8 @@ package cn.hippo4j.common.toolkit; -import cn.hutool.core.util.ReflectUtil; import org.junit.jupiter.api.Test; -import java.lang.reflect.Field; - public class UserContextTest { private static final String USERNAME = "test"; diff --git a/hippo4j-config/pom.xml b/hippo4j-config/pom.xml index c145134f..e999ccdd 100644 --- a/hippo4j-config/pom.xml +++ b/hippo4j-config/pom.xml @@ -49,22 +49,6 @@ runtime - - cn.hutool - hutool-all - - - - cn.hippo4j - hippo4j-common - ${revision} - - - - com.github.dozermapper - dozer-core - - org.projectlombok lombok @@ -80,6 +64,11 @@ netty-all + + org.apache.httpcomponents + httpclient + + org.hibernate.validator hibernate-validator diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java index 5c0fe84f..25543ee8 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java @@ -19,6 +19,7 @@ package cn.hippo4j.config.controller; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.config.model.ConfigAllInfo; @@ -27,7 +28,6 @@ import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.ConfigServletInner; import cn.hippo4j.config.service.biz.ConfigService; import cn.hippo4j.config.toolkit.Md5ConfigUtil; -import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import org.springframework.util.StringUtils; @@ -87,7 +87,7 @@ public class ConfigController { @PostMapping("/remove/config/cache") public Result removeConfigCache(@RequestBody Map bodyMap) { String groupKey = bodyMap.get(Constants.GROUP_KEY); - if (StrUtil.isNotBlank(groupKey)) { + if (StringUtil.isNotBlank(groupKey)) { ConfigCacheService.removeConfigCache(groupKey); } return Results.success(); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java index 6aa4df3f..f97fe5d0 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java @@ -18,11 +18,10 @@ package cn.hippo4j.config.monitor; import cn.hippo4j.common.executor.ExecutorFactory; +import cn.hippo4j.common.toolkit.DateUtil; import cn.hippo4j.config.config.ServerBootstrapProperties; import cn.hippo4j.config.model.HisRunDataInfo; import cn.hippo4j.config.service.biz.HisRunDataService; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.NonNull; @@ -30,6 +29,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; import java.util.Date; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -53,10 +53,9 @@ public class TimeCleanHistoryDataTask implements Runnable, InitializingBean { @Override public void run() { - Date currentDate = new Date(); - DateTime offsetMinuteDateTime = DateUtil.offsetMinute(currentDate, -properties.getCleanHistoryDataPeriod()); + LocalDateTime offsetMinuteDateTime = LocalDateTime.now().plusMinutes(-properties.getCleanHistoryDataPeriod()); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(HisRunDataInfo.class) - .le(HisRunDataInfo::getTimestamp, offsetMinuteDateTime.getTime()); + .le(HisRunDataInfo::getTimestamp, DateUtil.getTime(offsetMinuteDateTime)); hisRunDataService.remove(queryWrapper); } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java index 6c2860ff..7b8f67e6 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java @@ -18,11 +18,13 @@ package cn.hippo4j.config.notify; import cn.hippo4j.config.event.AbstractEvent; -import cn.hutool.core.collection.ConcurrentHashSet; import cn.hippo4j.config.notify.listener.AbstractSubscriber; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; @@ -34,7 +36,7 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; @Slf4j public class DefaultPublisher extends Thread implements EventPublisher { - protected final ConcurrentHashSet subscribers = new ConcurrentHashSet(); + protected final Set subscribers = Collections.synchronizedSet(new HashSet<>()); private BlockingQueue queue; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java index b877bfbb..185a6352 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java @@ -18,10 +18,11 @@ package cn.hippo4j.config.notify; import cn.hippo4j.config.event.AbstractEvent; -import cn.hutool.core.collection.ConcurrentHashSet; import cn.hippo4j.config.notify.listener.AbstractSubscriber; import cn.hippo4j.config.event.AbstractSlowEvent; +import java.util.Collections; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -35,7 +36,7 @@ public class DefaultSharePublisher extends DefaultPublisher { private final Map, Set> subMappings = new ConcurrentHashMap(); - protected final ConcurrentHashSet subscribers = new ConcurrentHashSet(); + protected final Set subscribers = Collections.synchronizedSet(new HashSet<>()); private final Lock lock = new ReentrantLock(); @@ -46,7 +47,7 @@ public class DefaultSharePublisher extends DefaultPublisher { try { Set sets = subMappings.get(subSlowEventType); if (sets == null) { - Set newSet = new ConcurrentHashSet(); + Set newSet = Collections.synchronizedSet(new HashSet<>()); newSet.add(subscriber); subMappings.put(subSlowEventType, newSet); return; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java index 3d154c72..edeb7ef2 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java @@ -26,14 +26,13 @@ import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.Joiner; import cn.hippo4j.common.toolkit.Md5Util; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.event.LocalDataChangeEvent; import cn.hippo4j.config.model.CacheItem; import cn.hippo4j.config.model.ConfigAllInfo; import cn.hippo4j.config.notify.NotifyCenter; import cn.hippo4j.config.service.biz.ConfigService; import cn.hippo4j.config.toolkit.MapUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; @@ -79,7 +78,7 @@ public class ConfigCacheService { private synchronized static String getContentMd5IsNullPut(String groupKey, String clientIdentify) { Map cacheItemMap = Optional.ofNullable(CLIENT_CONFIG_CACHE.get(groupKey)).orElse(new HashMap<>()); CacheItem cacheItem = null; - if (CollUtil.isNotEmpty(cacheItemMap) && (cacheItem = cacheItemMap.get(clientIdentify)) != null) { + if (CollectionUtil.isNotEmpty(cacheItemMap) && (cacheItem = cacheItemMap.get(clientIdentify)) != null) { return cacheItem.md5; } if (CONFIG_SERVICE == null) { @@ -87,7 +86,7 @@ public class ConfigCacheService { } String[] params = groupKey.split(GROUP_KEY_DELIMITER_TRANSLATION); ConfigAllInfo config = CONFIG_SERVICE.findConfigRecentInfo(params); - if (config != null && StrUtil.isNotBlank(config.getTpId())) { + if (config != null && StringUtil.isNotBlank(config.getTpId())) { cacheItem = new CacheItem(groupKey, config); cacheItemMap.put(clientIdentify, cacheItem); CLIENT_CONFIG_CACHE.put(groupKey, cacheItemMap); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java index c56a9242..5e8fd0fd 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java @@ -20,6 +20,7 @@ package cn.hippo4j.config.service; import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.Md5Util; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.config.event.AbstractEvent; import cn.hippo4j.config.event.LocalDataChangeEvent; @@ -29,8 +30,6 @@ import cn.hippo4j.config.toolkit.ConfigExecutor; import cn.hippo4j.config.toolkit.MapUtil; import cn.hippo4j.config.toolkit.Md5ConfigUtil; import cn.hippo4j.config.toolkit.RequestUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -118,7 +117,7 @@ public class LongPollingService { ClientLongPolling clientSub = iter.next(); String identity = groupKey + GROUP_KEY_DELIMITER + identify; List parseMapForFilter = CollectionUtil.newArrayList(identity); - if (StrUtil.isBlank(identify)) { + if (StringUtil.isBlank(identify)) { parseMapForFilter = MapUtil.parseMapForFilter(clientSub.clientMd5Map, groupKey); } parseMapForFilter.forEach(each -> { @@ -274,7 +273,7 @@ public class LongPollingService { * @param changedGroups Changed thread pool group key */ private void generateResponse(HttpServletResponse response, List changedGroups) { - if (CollUtil.isNotEmpty(changedGroups)) { + if (CollectionUtil.isNotEmpty(changedGroups)) { try { String respStr = buildRespStr(changedGroups); response.setHeader("Pragma", "no-cache"); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java index 4744a3ee..d94cc2e6 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java @@ -28,11 +28,11 @@ import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterReqDTO; import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterRespDTO; -import cn.hutool.core.text.StrBuilder; -import cn.hutool.http.HttpUtil; import com.fasterxml.jackson.core.type.TypeReference; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -98,12 +98,18 @@ public class ThreadPoolAdapterService { List addressList = actual.stream().map(ThreadPoolAdapterState::getClientAddress).collect(Collectors.toList()); List result = new ArrayList<>(addressList.size()); addressList.forEach(each -> { - String urlString = StrBuilder.create("http://", each, "/adapter/thread-pool/info").toString(); + String urlString = new StringBuilder() + .append("http://") + .append(each) + .append("/adapter/thread-pool/info") + .toString(); Map param = new HashMap<>(); param.put("mark", requestParameter.getMark()); param.put("threadPoolKey", requestParameter.getThreadPoolKey()); try { - String resultStr = HttpUtil.get(urlString, param, HTTP_EXECUTE_TIMEOUT); + + RestTemplate template = new RestTemplate(); + String resultStr = template.getForObject(urlString, String.class, param); if (StringUtil.isNotBlank(resultStr)) { Result restResult = JSONUtil.parseObject(resultStr, new TypeReference>() { }); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java index 14bd700c..bf70a5b9 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java @@ -35,8 +35,7 @@ import cn.hippo4j.config.model.biz.notify.NotifyReqDTO; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.ConfigChangePublisher; import cn.hippo4j.config.service.biz.*; -import cn.hippo4j.config.toolkit.BeanUtil; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -72,9 +71,9 @@ public class ConfigServiceImpl implements ConfigService { @Override public ConfigAllInfo findConfigAllInfo(String tpId, String itemId, String tenantId) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) - .eq(StrUtil.isNotBlank(tpId), ConfigAllInfo::getTpId, tpId) - .eq(StrUtil.isNotBlank(itemId), ConfigAllInfo::getItemId, itemId) - .eq(StrUtil.isNotBlank(tenantId), ConfigAllInfo::getTenantId, tenantId); + .eq(StringUtil.isNotBlank(tpId), ConfigAllInfo::getTpId, tpId) + .eq(StringUtil.isNotBlank(itemId), ConfigAllInfo::getItemId, itemId) + .eq(StringUtil.isNotBlank(tenantId), ConfigAllInfo::getTenantId, tenantId); ConfigAllInfo configAllInfo = configInfoMapper.selectOne(wrapper); return configAllInfo; } @@ -84,7 +83,7 @@ public class ConfigServiceImpl implements ConfigService { ConfigAllInfo resultConfig; ConfigAllInfo configInstance = null; String instanceId = params[3]; - if (StrUtil.isNotBlank(instanceId)) { + if (StringUtil.isNotBlank(instanceId)) { LambdaQueryWrapper instanceQueryWrapper = Wrappers.lambdaQuery(ConfigInstanceInfo.class) .eq(ConfigInstanceInfo::getTpId, params[0]) .eq(ConfigInstanceInfo::getItemId, params[1]) diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java index a22eb9ed..1c4c93af 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java @@ -20,6 +20,7 @@ package cn.hippo4j.config.service.biz.impl; import cn.hippo4j.common.monitor.Message; import cn.hippo4j.common.monitor.MessageWrapper; import cn.hippo4j.common.monitor.RuntimeMessage; +import cn.hippo4j.common.toolkit.DateUtil; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.common.toolkit.MessageConvert; import cn.hippo4j.common.web.base.Result; @@ -32,21 +33,20 @@ import cn.hippo4j.config.model.biz.monitor.MonitorQueryReqDTO; import cn.hippo4j.config.model.biz.monitor.MonitorRespDTO; import cn.hippo4j.config.monitor.QueryMonitorExecuteChoose; import cn.hippo4j.config.service.biz.HisRunDataService; -import cn.hippo4j.config.toolkit.BeanUtil; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; +import cn.hippo4j.common.toolkit.BeanUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import static cn.hutool.core.date.DatePattern.NORM_TIME_PATTERN; +import static cn.hippo4j.common.toolkit.DateUtil.NORM_TIME_PATTERN; /** * His run data service impl. @@ -63,15 +63,15 @@ public class HisRunDataServiceImpl extends ServiceImpl query(MonitorQueryReqDTO reqDTO) { - Date currentDate = new Date(); - DateTime dateTime = DateUtil.offsetMinute(currentDate, -properties.getCleanHistoryDataPeriod()); - long startTime = dateTime.getTime(); + LocalDateTime currentDate = LocalDateTime.now(); + LocalDateTime dateTime = currentDate.plusMinutes(-properties.getCleanHistoryDataPeriod()); + long startTime = DateUtil.getTime(dateTime); List hisRunDataInfos = this.lambdaQuery() .eq(HisRunDataInfo::getTenantId, reqDTO.getTenantId()) .eq(HisRunDataInfo::getItemId, reqDTO.getItemId()) .eq(HisRunDataInfo::getTpId, reqDTO.getTpId()) .eq(HisRunDataInfo::getInstanceId, reqDTO.getInstanceId()) - .between(HisRunDataInfo::getTimestamp, startTime, currentDate.getTime()) + .between(HisRunDataInfo::getTimestamp, startTime, DateUtil.getTime(currentDate)) .orderByAsc(HisRunDataInfo::getTimestamp) .list(); return BeanUtil.convert(hisRunDataInfos, MonitorRespDTO.class); @@ -79,15 +79,15 @@ public class HisRunDataServiceImpl extends ServiceImpl hisRunDataInfos = this.lambdaQuery() .eq(HisRunDataInfo::getTenantId, reqDTO.getTenantId()) .eq(HisRunDataInfo::getItemId, reqDTO.getItemId()) .eq(HisRunDataInfo::getTpId, reqDTO.getTpId()) .eq(HisRunDataInfo::getInstanceId, reqDTO.getInstanceId()) - .between(HisRunDataInfo::getTimestamp, startTime, currentDate.getTime()) + .between(HisRunDataInfo::getTimestamp, startTime, DateUtil.getTime(currentDate)) .orderByAsc(HisRunDataInfo::getTimestamp) .list(); List times = new ArrayList<>(); @@ -127,16 +127,16 @@ public class HisRunDataServiceImpl extends ServiceImpl { String[] parseKey = GroupKey.parseKey(each); List notifyInfos = listNotifyCommon("CONFIG", parseKey); - if (CollUtil.isNotEmpty(notifyInfos)) { - notifyListRespList.add(new NotifyListRespDTO(StrUtil.builder(parseKey[0], "+", "CONFIG").toString(), notifyInfos)); + if (CollectionUtil.isNotEmpty(notifyInfos)) { + notifyListRespList.add(new NotifyListRespDTO(parseKey[0] + "+" + "CONFIG", notifyInfos)); } List alarmInfos = listNotifyCommon("ALARM", parseKey); - if (CollUtil.isNotEmpty(alarmInfos)) { - notifyListRespList.add(new NotifyListRespDTO(StrUtil.builder(parseKey[0], "+", "ALARM").toString(), alarmInfos)); + if (CollectionUtil.isNotEmpty(alarmInfos)) { + notifyListRespList.add(new NotifyListRespDTO(parseKey[0] + "+" + "ALARM", alarmInfos)); } }); return notifyListRespList; @@ -72,9 +72,9 @@ public class NotifyServiceImpl implements NotifyService { @Override public IPage queryPage(NotifyQueryReqDTO reqDTO) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(NotifyInfo.class) - .eq(StrUtil.isNotBlank(reqDTO.getTenantId()), NotifyInfo::getTenantId, reqDTO.getTenantId()) - .eq(StrUtil.isNotBlank(reqDTO.getItemId()), NotifyInfo::getItemId, reqDTO.getItemId()) - .eq(StrUtil.isNotBlank(reqDTO.getTpId()), NotifyInfo::getTpId, reqDTO.getTpId()) + .eq(StringUtil.isNotBlank(reqDTO.getTenantId()), NotifyInfo::getTenantId, reqDTO.getTenantId()) + .eq(StringUtil.isNotBlank(reqDTO.getItemId()), NotifyInfo::getItemId, reqDTO.getItemId()) + .eq(StringUtil.isNotBlank(reqDTO.getTpId()), NotifyInfo::getTpId, reqDTO.getTpId()) .orderByDesc(NotifyInfo::getGmtCreate); IPage resultPage = notifyInfoMapper.selectPage(reqDTO, queryWrapper); return resultPage.convert(each -> { @@ -173,7 +173,7 @@ public class NotifyServiceImpl implements NotifyService { .eq(NotifyInfo::getPlatform, requestParam.getPlatform()) .eq(NotifyInfo::getType, type); List existNotifyInfos = notifyInfoMapper.selectList(queryWrapper); - if (CollUtil.isNotEmpty(existNotifyInfos)) { + if (CollectionUtil.isNotEmpty(existNotifyInfos)) { throw new ServiceException(String.format("%s 新增通知报警配置重复", type)); } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java index 10276d72..7cadd49e 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java @@ -17,13 +17,13 @@ package cn.hippo4j.config.service.biz.impl; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.mapper.OperationLogMapper; import cn.hippo4j.config.model.LogRecordInfo; import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO; import cn.hippo4j.config.model.biz.log.LogRecordRespDTO; import cn.hippo4j.config.service.biz.OperationLogService; -import cn.hippo4j.config.toolkit.BeanUtil; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -42,9 +42,9 @@ public class OperationLogServiceImpl implements OperationLogService { @Override public IPage queryPage(LogRecordQueryReqDTO pageQuery) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(LogRecordInfo.class) - .eq(StrUtil.isNotBlank(pageQuery.getBizNo()), LogRecordInfo::getBizNo, pageQuery.getBizNo()) - .eq(StrUtil.isNotBlank(pageQuery.getCategory()), LogRecordInfo::getCategory, pageQuery.getCategory()) - .eq(StrUtil.isNotBlank(pageQuery.getOperator()), LogRecordInfo::getOperator, pageQuery.getOperator()) + .eq(StringUtil.isNotBlank(pageQuery.getBizNo()), LogRecordInfo::getBizNo, pageQuery.getBizNo()) + .eq(StringUtil.isNotBlank(pageQuery.getCategory()), LogRecordInfo::getCategory, pageQuery.getCategory()) + .eq(StringUtil.isNotBlank(pageQuery.getOperator()), LogRecordInfo::getOperator, pageQuery.getOperator()) .orderByDesc(LogRecordInfo::getCreateTime); IPage selectPage = operationLogMapper.selectPage(pageQuery, queryWrapper); return selectPage.convert(each -> BeanUtil.convert(each, LogRecordRespDTO.class)); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java index f3a0baa6..1945562d 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java @@ -29,7 +29,7 @@ import cn.hippo4j.config.model.biz.tenant.TenantSaveReqDTO; import cn.hippo4j.config.model.biz.tenant.TenantUpdateReqDTO; import cn.hippo4j.config.service.biz.ItemService; import cn.hippo4j.config.service.biz.TenantService; -import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hippo4j.common.toolkit.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java index b26016b9..8c58e935 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java @@ -30,7 +30,7 @@ import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO; import cn.hippo4j.config.service.biz.ConfigService; import cn.hippo4j.config.service.biz.OperationLogService; import cn.hippo4j.config.service.biz.ThreadPoolService; -import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hippo4j.common.toolkit.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java index d67ab517..7f8e8ca1 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java @@ -19,8 +19,8 @@ package cn.hippo4j.config.service.handler; import cn.hippo4j.common.api.ClientCloseHookExecute; import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.service.ConfigCacheService; -import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -36,7 +36,7 @@ public class ClientCloseHookRemoveConfigCache implements ClientCloseHookExecute log.info("Remove Config Cache, Execute client hook function. Request: {}", JSONUtil.toJSONString(requestParam)); try { String groupKey = requestParam.getGroupKey(); - if (StrUtil.isNotBlank(groupKey)) { + if (StringUtil.isNotBlank(groupKey)) { ConfigCacheService.removeConfigCache(groupKey); } } catch (Exception ex) { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java deleted file mode 100644 index ad4c3879..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.hippo4j.config.toolkit; - -import com.github.dozermapper.core.DozerBeanMapperBuilder; -import com.github.dozermapper.core.Mapper; - -import java.util.*; - -/** - * Bean util. - */ -public class BeanUtil { - - private BeanUtil() { - - } - - protected static Mapper BEAN_MAPPER_BUILDER; - - static { - BEAN_MAPPER_BUILDER = DozerBeanMapperBuilder.buildDefault(); - } - - public static T convert(S source, Class clazz) { - return Optional.ofNullable(source) - .map(each -> BEAN_MAPPER_BUILDER.map(each, clazz)) - .orElse(null); - } - - public static List convert(List sources, Class clazz) { - return Optional.ofNullable(sources) - .map(each -> { - List targetList = new ArrayList(each.size()); - each.stream() - .forEach(item -> targetList.add(BEAN_MAPPER_BUILDER.map(item, clazz))); - return targetList; - }) - .orElse(null); - } - - public static Set convert(Set sources, Class clazz) { - return Optional.ofNullable(sources) - .map(each -> { - Set targetSize = new HashSet(each.size()); - each.stream() - .forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz))); - return targetSize; - }) - .orElse(null); - } -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java index 613ec640..f66aef67 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java @@ -17,7 +17,7 @@ package cn.hippo4j.config.toolkit; -import cn.hutool.core.collection.CollUtil; +import cn.hippo4j.common.toolkit.CollectionUtil; import java.util.ArrayList; import java.util.List; @@ -54,7 +54,7 @@ public class MapUtil { */ public static List parseMapForFilter(Map sourceMap, String filters) { List resultList = new ArrayList<>(); - if (CollUtil.isEmpty(sourceMap)) { + if (CollectionUtil.isEmpty(sourceMap)) { return resultList; } sourceMap.forEach((key, val) -> { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java index 85d369cf..cf79e888 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java @@ -17,7 +17,7 @@ package cn.hippo4j.config.toolkit; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.StringUtil; import javax.servlet.http.HttpServletRequest; @@ -36,6 +36,6 @@ public class RequestUtil { public static String getClientIdentify(HttpServletRequest request) { String identify = request.getHeader(LONG_PULLING_CLIENT_IDENTIFICATION); - return StrUtil.isBlank(identify) ? "" : identify; + return StringUtil.isBlank(identify) ? "" : identify; } } diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/ClassUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/ClassUtilTest.java index cffb82b1..66a0f5ea 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/ClassUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/ClassUtilTest.java @@ -18,7 +18,6 @@ package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.Assert; -import cn.hutool.core.lang.caller.CallerUtil; import org.junit.Test; import java.util.Objects; diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/EnvUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/EnvUtilTest.java index 109ee0ba..f65e9c5b 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/EnvUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/EnvUtilTest.java @@ -18,7 +18,7 @@ package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.Assert; -import cn.hutool.core.util.StrUtil; +import cn.hippo4j.common.toolkit.StringUtil; import org.junit.Test; /** @@ -29,7 +29,7 @@ public class EnvUtilTest { @Test public void getHippo4JHomeTest() { String hippo4JHome = EnvUtil.getHippo4JHome(); - Assert.isTrue(StrUtil.isNotBlank(hippo4JHome)); + Assert.isTrue(StringUtil.isNotBlank(hippo4JHome)); } @Test diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java index 58980692..440b84dd 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/MapUtilTest.java @@ -18,7 +18,7 @@ package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.Assert; -import cn.hutool.core.collection.CollectionUtil; +import cn.hippo4j.common.toolkit.CollectionUtil; import org.junit.Test; import java.util.HashMap; diff --git a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java index 5bfd5055..867b13d7 100644 --- a/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java +++ b/hippo4j-config/src/test/java/cn/hippo4j/config/toolkit/Md5ConfigUtilTest.java @@ -18,8 +18,8 @@ package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.Assert; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.model.ConfigAllInfo; -import cn.hutool.core.util.StrUtil; import org.assertj.core.util.Lists; import org.junit.Test; @@ -67,7 +67,7 @@ public class Md5ConfigUtilTest { } catch (IOException ignored) { } - Assert.isTrue(Objects.equals(StrUtil.EMPTY, key)); + Assert.isTrue(Objects.equals(StringUtil.EMPTY, key)); } @Test @@ -86,7 +86,7 @@ public class Md5ConfigUtilTest { ConfigAllInfo configAllInfo = new ConfigAllInfo(); configAllInfo.setDesc("hippo4j config"); String tpContentMd5 = Md5ConfigUtil.getTpContentMd5(configAllInfo); - Assert.isTrue(StrUtil.isNotEmpty(tpContentMd5)); + Assert.isTrue(StringUtil.isNotEmpty(tpContentMd5)); } } diff --git a/hippo4j-console/pom.xml b/hippo4j-console/pom.xml index dbadd05e..3d9a8b08 100644 --- a/hippo4j-console/pom.xml +++ b/hippo4j-console/pom.xml @@ -37,10 +37,6 @@ hibernate-validator - - cn.hutool - hutool-all - diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java index f743ae85..8937a004 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java @@ -23,14 +23,14 @@ import cn.hippo4j.common.web.base.Results; import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterReqDTO; import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterRespDTO; import cn.hippo4j.config.service.ThreadPoolAdapterService; -import cn.hutool.core.text.StrBuilder; -import cn.hutool.http.HttpUtil; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; +import java.util.HashMap; import java.util.List; import java.util.Set; @@ -46,6 +46,8 @@ public class ThreadPoolAdapterController { private final ThreadPoolAdapterService threadPoolAdapterService; + private final RestTemplate restTemplate = new RestTemplate(); + @GetMapping(REGISTER_ADAPTER_BASE_PATH + "/query") public Result> queryAdapterThreadPool(ThreadPoolAdapterReqDTO requestParameter) { List result = threadPoolAdapterService.query(requestParameter); @@ -61,8 +63,12 @@ public class ThreadPoolAdapterController { @PostMapping(REGISTER_ADAPTER_BASE_PATH + "/update") public Result updateAdapterThreadPool(@RequestBody ThreadPoolAdapterReqDTO requestParameter) { for (String each : requestParameter.getClientAddressList()) { - String urlString = StrBuilder.create("http://", each, "/adapter/thread-pool/update").toString(); - HttpUtil.post(urlString, JSONUtil.toJSONString(requestParameter), HTTP_EXECUTE_TIMEOUT); + String urlString = new StringBuilder() + .append("http://") + .append(each) + .append("/adapter/thread-pool/update") + .toString(); + restTemplate.postForObject(urlString, JSONUtil.toJSONString(requestParameter), Object.class); } return Results.success(); } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java index 909ec0e8..f0da644b 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java @@ -19,6 +19,7 @@ package cn.hippo4j.console.controller; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Result; @@ -31,21 +32,19 @@ import cn.hippo4j.config.model.biz.threadpool.ThreadPoolRespDTO; import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.biz.ThreadPoolService; -import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.console.model.ThreadPoolInstanceInfo; import cn.hippo4j.console.model.WebThreadPoolReqDTO; import cn.hippo4j.console.model.WebThreadPoolRespDTO; import cn.hippo4j.discovery.core.BaseInstanceRegistry; import cn.hippo4j.discovery.core.Lease; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.text.StrBuilder; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; +import java.util.HashMap; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -66,6 +65,8 @@ public class ThreadPoolController { private final BaseInstanceRegistry baseInstanceRegistry; + private final RestTemplate restTemplate = new RestTemplate(); + @PostMapping("/query/page") public Result> queryNameSpacePage(@RequestBody ThreadPoolQueryReqDTO reqDTO) { return Results.success(threadPoolService.queryThreadPoolPage(reqDTO)); @@ -86,7 +87,7 @@ public class ThreadPoolController { @DeleteMapping("/delete") public Result deletePool(@RequestBody ThreadPoolDelReqDTO reqDTO) { List> leases = baseInstanceRegistry.listInstance(reqDTO.getItemId()); - Lease first = CollUtil.getFirst(leases); + Lease first = CollectionUtil.getFirst(leases); if (first == null) { threadPoolService.deletePool(reqDTO); return Results.success(); @@ -111,8 +112,13 @@ public class ThreadPoolController { @GetMapping("/run/state/{tpId}") public Result runState(@PathVariable("tpId") String tpId, @RequestParam(value = "clientAddress") String clientAddress) { - String urlString = StrBuilder.create("http://", clientAddress, "/run/state/", tpId).toString(); - String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + String urlString = new StringBuilder() + .append("http://") + .append(clientAddress) + .append("/run/state/") + .append(tpId) + .toString(); + String data = restTemplate.getForObject(urlString, String.class, new HashMap<>()); Result result = JSONUtil.parseObject(data, Result.class); return result; } @@ -120,8 +126,13 @@ public class ThreadPoolController { @GetMapping("/run/thread/state/{tpId}") public Result runThreadState(@PathVariable("tpId") String tpId, @RequestParam(value = "clientAddress") String clientAddress) { - String urlString = StrBuilder.create("http://", clientAddress, "/run/thread/state/", tpId).toString(); - String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + String urlString = new StringBuilder() + .append("http://") + .append(clientAddress) + .append("/run/thread/state/") + .append(tpId) + .toString(); + String data = restTemplate.getForObject(urlString, String.class, new HashMap<>()); Result result = JSONUtil.parseObject(data, Result.class); return result; } @@ -129,7 +140,7 @@ public class ThreadPoolController { @GetMapping("/list/client/instance/{itemId}") public Result listClientInstance(@PathVariable("itemId") String itemId) { List> leases = baseInstanceRegistry.listInstance(itemId); - Lease first = CollUtil.getFirst(leases); + Lease first = CollectionUtil.getFirst(leases); if (first == null) { return Results.success(new ArrayList<>()); } @@ -156,16 +167,24 @@ public class ThreadPoolController { @GetMapping("/web/base/info") public Result getPoolBaseState(@RequestParam(value = "clientAddress") String clientAddress) { - String urlString = StrBuilder.create("http://", clientAddress, "/web/base/info").toString(); - String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + String urlString = new StringBuilder() + .append("http://") + .append(clientAddress) + .append("/web/base/info") + .toString(); + String data = restTemplate.getForObject(urlString, String.class, new HashMap<>()); Result result = JSONUtil.parseObject(data, Result.class); return result; } @GetMapping("/web/run/state") public Result getPoolRunState(@RequestParam(value = "clientAddress") String clientAddress) { - String urlString = StrBuilder.create("http://", clientAddress, "/web/run/state").toString(); - String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + String urlString = new StringBuilder() + .append("http://") + .append(clientAddress) + .append("/web/run/state") + .toString(); + String data = restTemplate.getForObject(urlString, String.class, new HashMap<>()); Result result = JSONUtil.parseObject(data, Result.class); return result; } @@ -173,8 +192,12 @@ public class ThreadPoolController { @PostMapping("/web/update/pool") public Result updateWebThreadPool(@RequestBody WebThreadPoolReqDTO requestParam) { for (String each : requestParam.getClientAddressList()) { - String urlString = StrBuilder.create("http://", each, "/web/update/pool").toString(); - HttpUtil.post(urlString, JSONUtil.toJSONString(requestParam), HTTP_EXECUTE_TIMEOUT); + String urlString = new StringBuilder() + .append("http://") + .append(each) + .append("/web/update/pool") + .toString(); + restTemplate.postForObject(urlString, JSONUtil.toJSONString(requestParam), Object.class); } return Results.success(); } @@ -183,7 +206,7 @@ public class ThreadPoolController { public Result> listInstance(@PathVariable("itemId") String itemId, @PathVariable("tpId") String tpId) { List> leases = baseInstanceRegistry.listInstance(itemId); - Lease first = CollUtil.getFirst(leases); + Lease first = CollectionUtil.getFirst(leases); if (first == null) { return Results.success(new ArrayList<>()); } @@ -192,16 +215,16 @@ public class ThreadPoolController { String groupKey = getGroupKey(tpId, itemTenantKey); Map content = ConfigCacheService.getContent(groupKey); Map activeMap = - leases.stream().map(each -> each.getHolder()).filter(each -> StringUtil.isNotBlank(each.getActive())) + leases.stream().map(Lease::getHolder).filter(each -> StringUtil.isNotBlank(each.getActive())) .collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getActive)); - Map clientBasePathMap = leases.stream().map(each -> each.getHolder()) + Map clientBasePathMap = leases.stream().map(Lease::getHolder) .filter(each -> StringUtil.isNotBlank(each.getClientBasePath())) .collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getClientBasePath)); List returnThreadPool = new ArrayList<>(); content.forEach((key, val) -> { ThreadPoolInstanceInfo threadPoolInstanceInfo = BeanUtil.convert(val.configAllInfo, ThreadPoolInstanceInfo.class); - threadPoolInstanceInfo.setClientAddress(StrUtil.subBefore(key, Constants.IDENTIFY_SLICER_SYMBOL, false)); + threadPoolInstanceInfo.setClientAddress(StringUtil.subBefore(key, Constants.IDENTIFY_SLICER_SYMBOL)); threadPoolInstanceInfo.setActive(activeMap.get(key)); threadPoolInstanceInfo.setIdentify(key); threadPoolInstanceInfo.setClientBasePath(clientBasePathMap.get(key)); diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java b/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java index 110a5589..b67960c7 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java @@ -20,6 +20,7 @@ package cn.hippo4j.console.service.impl; import cn.hippo4j.common.enums.DelEnum; import cn.hippo4j.common.model.InstanceInfo; import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.DateUtil; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.config.mapper.ConfigInfoMapper; import cn.hippo4j.config.mapper.HisRunDataMapper; @@ -31,19 +32,13 @@ import cn.hippo4j.console.model.*; import cn.hippo4j.console.service.DashboardService; import cn.hippo4j.discovery.core.BaseInstanceRegistry; import cn.hippo4j.discovery.core.Lease; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Dict; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.time.LocalDateTime; +import java.util.*; import java.util.stream.Collectors; import static cn.hippo4j.common.toolkit.ContentUtil.getGroupKey; @@ -80,9 +75,11 @@ public class DashboardServiceImpl implements DashboardService { @Override public LineChartInfo getLineChatInfo() { - Date currentDate = new Date(); - DateTime startTime = DateUtil.offsetMinute(currentDate, -10); - List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolMaxRanking(startTime.getTime(), currentDate.getTime()); + LocalDateTime currentDate = LocalDateTime.now(); + LocalDateTime startDate = currentDate.plusMinutes(-10); + long currentTime = DateUtil.getTime(currentDate); + long startTime = DateUtil.getTime(startDate); + List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolMaxRanking(startTime, currentTime); List oneList = new ArrayList<>(); List twoList = new ArrayList<>(); List threeList = new ArrayList<>(); @@ -115,7 +112,9 @@ public class DashboardServiceImpl implements DashboardService { Integer threadPoolCount = configInfoMapper.selectCount(threadPoolQueryWrapper); tenantThreadPoolNum += threadPoolCount; } - Dict dict = Dict.create().set("name", tenant.getTenantId()).set("value", tenantThreadPoolNum); + Map dict = new LinkedHashMap<>(); + dict.put("name", tenant.getTenantId()); + dict.put("value", tenantThreadPoolNum); tenantChartList.add(dict); } List> resultTenantChartList = tenantChartList.stream() @@ -136,7 +135,9 @@ public class DashboardServiceImpl implements DashboardService { .eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL.getIntCode()); Integer threadPoolCount = configInfoMapper.selectCount(threadPoolQueryWrapper); if (threadPoolCount != null) { - Dict dict = Dict.create().set("name", each).set("value", threadPoolCount); + Map dict = new LinkedHashMap<>(); + dict.put("name", each); + dict.put("value", threadPoolCount); pieDataList.add(dict); } } @@ -154,15 +155,17 @@ public class DashboardServiceImpl implements DashboardService { @Override public RankingChart getRankingChart() { - Date currentDate = new Date(); - DateTime tenTime = DateUtil.offsetMinute(currentDate, -10); + LocalDateTime currentDate = LocalDateTime.now(); + LocalDateTime startDate = currentDate.plusMinutes(-10); + long currentTime = DateUtil.getTime(currentDate); + long startTime = DateUtil.getTime(startDate); List resultList = new ArrayList<>(); - List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolTaskSumRanking(tenTime.getTime(), currentDate.getTime()); + List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolTaskSumRanking(startTime, currentTime); threadPoolTaskRankings.forEach(each -> { RankingChart.RankingChartInfo rankingChartInfo = new RankingChart.RankingChartInfo(); rankingChartInfo.setMaxCompletedTaskCount(each.getMaxCompletedTaskCount()); List> leases = baseInstanceRegistry.listInstance(each.getItemId()); - Lease first = CollUtil.getFirst(leases); + Lease first = CollectionUtil.getFirst(leases); if (first == null) { rankingChartInfo.setInst(0); } else { diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java index b5588613..53489a23 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java @@ -29,7 +29,6 @@ import cn.hippo4j.message.enums.NotifyTypeEnum; import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; import cn.hippo4j.message.request.AlarmNotifyRequest; import cn.hippo4j.message.request.ChangeParameterNotifyRequest; -import cn.hutool.core.util.StrUtil; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -198,7 +197,7 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner */ public void sendPoolConfigChange(ChangeParameterNotifyRequest request) { request.setActive(active.toUpperCase()); - String appName = StrUtil.isBlank(itemId) ? applicationName : itemId; + String appName = StringUtil.isBlank(itemId) ? applicationName : itemId; request.setAppName(appName); request.setIdentify(IdentifyUtil.getIdentify()); hippo4jSendMessageService.sendChangeMessage(request); @@ -218,8 +217,8 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner long rejectCount = threadPoolExecutor instanceof DynamicThreadPoolExecutor ? ((DynamicThreadPoolExecutor) threadPoolExecutor).getRejectCountNum() : -1L; - AlarmNotifyRequest alarmNotifyRequest = AlarmNotifyRequest.builder() - .appName(StrUtil.isBlank(itemId) ? applicationName : itemId) + return AlarmNotifyRequest.builder() + .appName(StringUtil.isBlank(itemId) ? applicationName : itemId) .active(active.toUpperCase()) .identify(IdentifyUtil.getIdentify()) .corePoolSize(threadPoolExecutor.getCorePoolSize()) @@ -235,6 +234,5 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner .rejectedExecutionHandlerName(rejectedExecutionHandler.getClass().getSimpleName()) .rejectCountNum(rejectCount) .build(); - return alarmNotifyRequest; } } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java index d584b1d6..6287b24a 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java @@ -22,9 +22,9 @@ import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.common.toolkit.CalculateUtil; -import cn.hutool.core.date.DateUtil; -import java.util.Date; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; @@ -105,7 +105,7 @@ public abstract class AbstractThreadPoolRuntime { long rejectCount = pool instanceof DynamicThreadPoolExecutor ? ((DynamicThreadPoolExecutor) pool).getRejectCountNum() : -1L; stateInfo.setRejectCount(rejectCount); - stateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); + stateInfo.setClientLastRefreshTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); stateInfo.setTimestamp(System.currentTimeMillis()); return supplement(stateInfo); } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java index 94265d22..62b9b1ab 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java @@ -19,19 +19,20 @@ package cn.hippo4j.core.executor.state; import cn.hippo4j.common.model.ManyThreadPoolRunStateInfo; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.common.toolkit.ByteConvertUtil; import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.core.executor.support.AbstractDynamicExecutorSupport; import cn.hippo4j.core.toolkit.inet.InetUtils; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.system.RuntimeInfo; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.ConfigurableEnvironment; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.MemoryUsage; import java.util.concurrent.ThreadPoolExecutor; import static cn.hippo4j.core.toolkit.IdentifyUtil.CLIENT_IDENTIFICATION_VALUE; @@ -49,18 +50,22 @@ public class ThreadPoolRunStateHandler extends AbstractThreadPoolRuntime { @Override public ThreadPoolRunStateInfo supplement(ThreadPoolRunStateInfo poolRunStateInfo) { - RuntimeInfo runtimeInfo = new RuntimeInfo(); - String memoryProportion = StrUtil.builder( - "已分配: ", - ByteConvertUtil.getPrintSize(runtimeInfo.getTotalMemory()), - " / 最大可用: ", - ByteConvertUtil.getPrintSize(runtimeInfo.getMaxMemory())).toString(); + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage(); + long used = heapMemoryUsage.getUsed(); + long max = heapMemoryUsage.getMax(); + String memoryProportion = new StringBuilder() + .append("已分配: ") + .append(ByteConvertUtil.getPrintSize(used)) + .append(" / 最大可用: ") + .append(ByteConvertUtil.getPrintSize(max)) + .toString(); poolRunStateInfo.setCurrentLoad(poolRunStateInfo.getCurrentLoad() + "%"); poolRunStateInfo.setPeakLoad(poolRunStateInfo.getPeakLoad() + "%"); String ipAddress = hippo4JInetUtils.findFirstNonLoopBackHostInfo().getIpAddress(); poolRunStateInfo.setHost(ipAddress); poolRunStateInfo.setMemoryProportion(memoryProportion); - poolRunStateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(runtimeInfo.getFreeMemory())); + poolRunStateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(Math.subtractExact(max, used))); String threadPoolId = poolRunStateInfo.getTpId(); DynamicThreadPoolWrapper executorService = GlobalThreadPoolManage.getExecutorService(threadPoolId); ThreadPoolExecutor pool = executorService.getExecutor(); @@ -71,7 +76,7 @@ public class ThreadPoolRunStateHandler extends AbstractThreadPoolRuntime { rejectedName = pool.getRejectedExecutionHandler().getClass().getSimpleName(); } poolRunStateInfo.setRejectedName(rejectedName); - ManyThreadPoolRunStateInfo manyThreadPoolRunStateInfo = BeanUtil.toBean(poolRunStateInfo, ManyThreadPoolRunStateInfo.class); + ManyThreadPoolRunStateInfo manyThreadPoolRunStateInfo = BeanUtil.convert(poolRunStateInfo, ManyThreadPoolRunStateInfo.class); manyThreadPoolRunStateInfo.setIdentify(CLIENT_IDENTIFICATION_VALUE); String active = environment.getProperty("spring.profiles.active", "UNKNOWN"); manyThreadPoolRunStateInfo.setActive(active.toUpperCase()); diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java index 9f25413a..fc9c8f2e 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java @@ -17,7 +17,7 @@ package cn.hippo4j.core.executor.state; -import cn.hutool.core.util.ReflectUtil; +import cn.hippo4j.common.toolkit.ReflectUtil; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Method; @@ -49,7 +49,7 @@ public class ThreadPoolStatusHandler { if (EXCEPTION_FLAG.get()) { try { Method runStateLessThan = ReflectUtil.getMethodByName(ThreadPoolExecutor.class, "runStateLessThan"); - cn.hippo4j.common.toolkit.ReflectUtil.setAccessible(runStateLessThan); + ReflectUtil.setAccessible(runStateLessThan); AtomicInteger ctl = (AtomicInteger) ReflectUtil.getFieldValue(executor, "ctl"); int shutdown = (int) ReflectUtil.getFieldValue(executor, "SHUTDOWN"); boolean runStateLessThanBool = ReflectUtil.invoke(executor, runStateLessThan, ctl.get(), shutdown); diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java index a1d1975b..4d002f8c 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java @@ -17,6 +17,7 @@ package cn.hippo4j.core.executor.support; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.common.toolkit.Assert; import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; import lombok.Data; diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java index c4e18963..0975b773 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java @@ -18,15 +18,12 @@ package cn.hippo4j.core.toolkit; import cn.hippo4j.common.config.ApplicationContextHolder; -import cn.hippo4j.common.toolkit.CollectionUtil; -import cn.hippo4j.common.toolkit.Joiner; -import cn.hippo4j.common.toolkit.ThreadUtil; +import cn.hippo4j.common.toolkit.*; import cn.hippo4j.core.toolkit.inet.InetUtils; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; import org.springframework.core.env.ConfigurableEnvironment; import java.util.ArrayList; +import java.util.UUID; import static cn.hippo4j.common.constant.Constants.GROUP_KEY_DELIMITER; import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; @@ -48,16 +45,18 @@ public class IdentifyUtil { * @return */ public static synchronized String generate(ConfigurableEnvironment environment, InetUtils hippo4JInetUtils) { - if (StrUtil.isNotBlank(IDENTIFY)) { + if (StringUtil.isNotBlank(IDENTIFY)) { return IDENTIFY; } String ip = hippo4JInetUtils.findFirstNonLoopBackHostInfo().getIpAddress(); String port = environment.getProperty("server.port", "8080"); - String identification = StrUtil.builder(ip, - ":", - port, - IDENTIFY_SLICER_SYMBOL, - CLIENT_IDENTIFICATION_VALUE).toString(); + String identification = new StringBuilder() + .append(ip) + .append(":") + .append(port) + .append(IDENTIFY_SLICER_SYMBOL) + .append(CLIENT_IDENTIFICATION_VALUE) + .toString(); IDENTIFY = identification; return identification; } @@ -68,7 +67,7 @@ public class IdentifyUtil { * @return */ public static String getIdentify() { - while (StrUtil.isBlank(IDENTIFY)) { + while (StringUtil.isBlank(IDENTIFY)) { ConfigurableEnvironment environment = ApplicationContextHolder.getBean(ConfigurableEnvironment.class); InetUtils inetUtils = ApplicationContextHolder.getBean(InetUtils.class); if (environment != null && inetUtils != null) { diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java index 66dcc6bd..ad6ed740 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java @@ -17,10 +17,10 @@ package cn.hippo4j.discovery.core; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.common.design.observer.AbstractSubjectCenter; import cn.hippo4j.common.model.InstanceInfo; import cn.hippo4j.common.model.InstanceInfo.InstanceStatus; -import cn.hutool.core.thread.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -189,8 +189,8 @@ public class BaseInstanceRegistry implements InstanceRegistry { new ScheduledThreadPoolExecutor( SCHEDULED_THREAD_CORE_NUM, new ThreadFactoryBuilder() - .setNamePrefix("registry-eviction") - .setDaemon(true) + .prefix("registry-eviction") + .daemon(true) .build()); private final AtomicReference evictionTaskRef = new AtomicReference(); diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java index 5fee289d..a7ac1ec8 100644 --- a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java @@ -18,7 +18,6 @@ package cn.hippo4j.example.core.inittest; import cn.hippo4j.example.core.constant.GlobalTestConstant; -import cn.hutool.core.thread.ThreadUtil; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; import lombok.extern.slf4j.Slf4j; @@ -47,7 +46,13 @@ public class AlarmSendMessageTest { DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); ThreadPoolExecutor poolExecutor = poolWrapper.getExecutor(); try { - poolExecutor.execute(() -> ThreadUtil.sleep(10240124)); + poolExecutor.execute(() -> { + try { + Thread.sleep(10240124); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }); } catch (Exception ex) { log.error("Throw reject policy.", ex.getMessage()); } 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 c6cdb011..049d6d51 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 @@ -17,7 +17,6 @@ package cn.hippo4j.example.core.inittest; -import cn.hutool.core.thread.ThreadUtil; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; import org.springframework.stereotype.Component; @@ -83,7 +82,11 @@ public class RunStateHandlerTest { * When the execution of the thread pool task times out, the Trace flag is put into the MDC, and it is printed out when an alarm occurs. */ MDC.put(EXECUTE_TIMEOUT_TRACE, "39948722194639841.251.16612352194691531"); - ThreadUtil.sleep(5000); + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } for (int i = 0; i < Integer.MAX_VALUE; i++) { try { executor.execute(() -> { @@ -102,7 +105,11 @@ public class RunStateHandlerTest { }); } catch (Exception ignored) { } - ThreadUtil.sleep(500); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } }); } diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java index 4e08a080..0d69bdcb 100644 --- a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java @@ -20,7 +20,6 @@ package cn.hippo4j.example.core.inittest; import cn.hippo4j.example.core.constant.GlobalTestConstant; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; -import cn.hutool.core.thread.ThreadUtil; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; import org.springframework.core.task.TaskDecorator; @@ -60,12 +59,14 @@ public class TaskDecoratorTest { public void taskDecoratorTest() { taskDecoratorTestExecutor.execute(() -> { MDC.put(PLACEHOLDER, "View the official website: https://www.hippo4j.cn"); - ThreadUtil.sleep(5000); - DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); - ThreadPoolExecutor threadPoolExecutor = poolWrapper.getExecutor(); - threadPoolExecutor.execute(() -> { - log.info("Pass context via taskDecorator MDC: {}", MDC.get(PLACEHOLDER)); - }); + try { + Thread.sleep(5000); + DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); + ThreadPoolExecutor threadPoolExecutor = poolWrapper.getExecutor(); + threadPoolExecutor.execute(() -> log.info("Pass context via taskDecorator MDC: {}", MDC.get(PLACEHOLDER))); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } }); } diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java index 04d01c71..9cfbddbd 100644 --- a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java @@ -17,6 +17,7 @@ package cn.hippo4j.springboot.starter.adapter.kafka.example.produce; +import cn.hippo4j.common.toolkit.IdUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.example.core.dto.SendMessageDTO; import lombok.AllArgsConstructor; @@ -26,8 +27,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.UUID; - /** * Kafka message produce. */ @@ -44,7 +43,7 @@ public class KafkaMessageProduce { @GetMapping("/message/send") public String sendMessage(Integer count) { for (int i = 0; i < count; i++) { - String keys = UUID.randomUUID().toString(); + String keys = IdUtil.randomUUID(); SendMessageDTO payload = SendMessageDTO.builder() .receiver("156011xxx91") .uid(keys) diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java index c0a66817..5113bad8 100644 --- a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java @@ -17,6 +17,7 @@ package cn.hippo4j.springboot.starter.adapter.rabbitmq.example.producer; +import cn.hippo4j.common.toolkit.IdUtil; import cn.hippo4j.example.core.dto.SendMessageDTO; import cn.hippo4j.springboot.starter.adapter.rabbitmq.example.constants.SimpleMQConstant; import lombok.AllArgsConstructor; @@ -26,8 +27,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.UUID; - /** * Message produce. */ @@ -42,7 +41,7 @@ public class MessageProduce { @GetMapping("/message/send") public String sendMessage(Integer count) { for (int i = 0; i < count; i++) { - String keys = UUID.randomUUID().toString(); + String keys = IdUtil.randomUUID(); SendMessageDTO payload = SendMessageDTO.builder() .receiver("156011xxx91") .uid(keys) diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.java index bf24a379..eeb2953a 100644 --- a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.java +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.java @@ -17,6 +17,7 @@ package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rabbitmq.example; +import cn.hippo4j.common.toolkit.IdUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.example.core.dto.SendMessageDTO; import lombok.AllArgsConstructor; @@ -26,8 +27,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.UUID; - /** * Message produce. */ @@ -50,7 +49,7 @@ public class MessageProduce { } private void sendMessage0() { - String keys = UUID.randomUUID().toString(); + String keys = IdUtil.randomUUID(); SendMessageDTO payload = SendMessageDTO.builder() .receiver("156011xxx91") .uid(keys) diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java index 0255a33d..b7f9d590 100644 --- a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java @@ -17,6 +17,7 @@ package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq.example; +import cn.hippo4j.common.toolkit.IdUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.example.core.dto.SendMessageDTO; import lombok.AllArgsConstructor; @@ -28,8 +29,6 @@ import org.springframework.messaging.support.MessageBuilder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.UUID; - /** * Message produce. */ @@ -55,7 +54,7 @@ public class MessageProduce { } private void sendMessage(String tags) { - String keys = UUID.randomUUID().toString(); + String keys = IdUtil.randomUUID(); SendMessageDTO payload = SendMessageDTO.builder() .receiver("156011xxx91") .uid(keys) diff --git a/hippo4j-message/pom.xml b/hippo4j-message/pom.xml index 60de5b82..fe964d3a 100644 --- a/hippo4j-message/pom.xml +++ b/hippo4j-message/pom.xml @@ -39,10 +39,6 @@ commons-codec - - cn.hutool - hutool-all - diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java index 02c2a470..25600ea6 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java @@ -25,14 +25,15 @@ import cn.hippo4j.message.service.SendMessageHandler; import cn.hippo4j.message.request.AlarmNotifyRequest; import cn.hippo4j.message.request.ChangeParameterNotifyRequest; import cn.hippo4j.common.toolkit.StringUtil; -import cn.hutool.core.date.DateUtil; import cn.hippo4j.common.toolkit.FileUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.Objects; import java.util.stream.Collectors; @@ -66,14 +67,14 @@ public class LarkSendMessageHandler implements SendMessageHandler FileUtil.readUtf8String(larkAlarmTimoutTraceReplaceJsonKey)); if (StringUtil.isNotBlank(executeTimeoutTrace)) { String larkAlarmTimoutTraceReplaceTxt = String.format(larkAlarmTimoutTraceReplaceJson, executeTimeoutTrace); - larkAlarmTimoutReplaceTxt = StrUtil.replace(larkAlarmTimoutReplaceJson, larkAlarmTimoutTraceReplaceJson, larkAlarmTimoutTraceReplaceTxt); + larkAlarmTimoutReplaceTxt = StringUtil.replace(larkAlarmTimoutReplaceJson, larkAlarmTimoutTraceReplaceJson, larkAlarmTimoutTraceReplaceTxt); } else { - larkAlarmTimoutReplaceTxt = StrUtil.replace(larkAlarmTimoutReplaceJson, larkAlarmTimoutTraceReplaceJson, ""); + larkAlarmTimoutReplaceTxt = StringUtil.replace(larkAlarmTimoutReplaceJson, larkAlarmTimoutTraceReplaceJson, ""); } larkAlarmTimoutReplaceTxt = String.format(larkAlarmTimoutReplaceTxt, alarmNotifyRequest.getExecuteTime(), alarmNotifyRequest.getExecuteTimeOut()); - larkAlarmTxt = StrUtil.replace(larkAlarmTxt, larkAlarmTimoutReplaceJson, larkAlarmTimoutReplaceTxt); + larkAlarmTxt = StringUtil.replace(larkAlarmTxt, larkAlarmTimoutReplaceJson, larkAlarmTimoutReplaceTxt); } else { - larkAlarmTxt = StrUtil.replace(larkAlarmTxt, larkAlarmTimoutReplaceJson, ""); + larkAlarmTxt = StringUtil.replace(larkAlarmTxt, larkAlarmTimoutReplaceJson, ""); } String text = String.format(larkAlarmTxt, @@ -114,7 +115,7 @@ public class LarkSendMessageHandler implements SendMessageHandler StrUtil.startWith(receive, LARK_OPENID_PREFIX) ? String.format(LARK_AT_FORMAT_OPENID, receive) : String.format(LARK_AT_FORMAT_USERNAME, receive)) + .map(receive -> StringUtil.startWith(receive, LARK_OPENID_PREFIX) ? String.format(LARK_AT_FORMAT_OPENID, receive) : String.format(LARK_AT_FORMAT_USERNAME, receive)) .collect(Collectors.joining(" ")); } private void execute(String secretKey, String text) { String serverUrl = LARK_BOT_URL + secretKey; try { - HttpRequest.post(serverUrl).body(text).execute(); + RestTemplate template = new RestTemplate(); + template.postForObject(serverUrl, text, Object.class); } catch (Exception ex) { log.error("Lark failed to send message", ex); } diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java index 834488d6..38bc9111 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java @@ -18,16 +18,16 @@ package cn.hippo4j.message.platform; import cn.hippo4j.common.toolkit.FileUtil; -import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.Singleton; import cn.hippo4j.message.enums.NotifyPlatformEnum; import cn.hippo4j.message.platform.base.AbstractRobotSendMessageHandler; import cn.hippo4j.message.platform.base.RobotMessageActualContent; import cn.hippo4j.message.platform.base.RobotMessageExecuteDTO; -import cn.hutool.http.HttpRequest; import lombok.Data; import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; import static cn.hippo4j.message.platform.constant.WeChatAlarmConstants.*; @@ -46,7 +46,7 @@ public class WeChatSendMessageHandler extends AbstractRobotSendMessageHandler { protected RobotMessageActualContent buildMessageActualContent() { String weChatAlarmTxtKey = "message/robot/dynamic-thread-pool/wechat-alarm.txt"; String weChatConfigTxtKey = "message/robot/dynamic-thread-pool/wechat-config.txt"; - RobotMessageActualContent robotMessageActualContent = RobotMessageActualContent.builder() + return RobotMessageActualContent.builder() .receiveSeparator("><@") .changeSeparator(" ➲ ") .replaceTxt(WE_CHAT_ALARM_TIMOUT_REPLACE_TXT) @@ -54,7 +54,6 @@ public class WeChatSendMessageHandler extends AbstractRobotSendMessageHandler { .alarmMessageContent(Singleton.get(weChatAlarmTxtKey, () -> FileUtil.readUtf8String(weChatAlarmTxtKey))) .configMessageContent(Singleton.get(weChatConfigTxtKey, () -> FileUtil.readUtf8String(weChatConfigTxtKey))) .build(); - return robotMessageActualContent; } @Override @@ -66,7 +65,8 @@ public class WeChatSendMessageHandler extends AbstractRobotSendMessageHandler { Markdown markdown = new Markdown(); markdown.setContent(robotMessageExecuteDTO.getText()); weChatReq.setMarkdown(markdown); - HttpRequest.post(serverUrl).body(JSONUtil.toJSONString(weChatReq)).execute(); + RestTemplate template = new RestTemplate(); + template.postForObject(serverUrl, weChatReq, Object.class); } catch (Exception ex) { log.error("WeChat failed to send message", ex); } diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java index c2d2acd2..34f7fd71 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java @@ -24,9 +24,9 @@ import cn.hippo4j.message.enums.NotifyTypeEnum; import cn.hippo4j.message.request.AlarmNotifyRequest; import cn.hippo4j.message.request.ChangeParameterNotifyRequest; import cn.hippo4j.message.service.SendMessageHandler; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Objects; /** @@ -64,15 +64,15 @@ public abstract class AbstractRobotSendMessageHandler implements SendMessageHand String executeTimeoutTrace = alarmNotifyRequest.getExecuteTimeoutTrace(); if (StringUtil.isNotBlank(executeTimeoutTrace)) { String alarmTimoutTraceReplaceTxt = String.format(traceReplaceTxt, executeTimeoutTrace); - alarmTimoutReplaceTxt = StrUtil.replace(replaceTxt, traceReplaceTxt, alarmTimoutTraceReplaceTxt); + alarmTimoutReplaceTxt = StringUtil.replace(replaceTxt, traceReplaceTxt, alarmTimoutTraceReplaceTxt); } else { - alarmTimoutReplaceTxt = StrUtil.replace(replaceTxt, traceReplaceTxt, ""); + alarmTimoutReplaceTxt = StringUtil.replace(replaceTxt, traceReplaceTxt, ""); } replaceTxt = String.format(alarmTimoutReplaceTxt, alarmNotifyRequest.getExecuteTime(), alarmNotifyRequest.getExecuteTimeOut()); } else { replaceTxt = ""; } - alarmContentTxt = StrUtil.replace(alarmContentTxt, "${timout-content}", replaceTxt); + alarmContentTxt = StringUtil.replace(alarmContentTxt, "${timout-content}", replaceTxt); String text = String.format( alarmContentTxt, // 环境 @@ -114,7 +114,7 @@ public abstract class AbstractRobotSendMessageHandler implements SendMessageHand // 报警频率 notifyConfig.getInterval(), // 当前时间 - DateUtil.now()); + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); execute(RobotMessageExecuteDTO.builder().text(text).notifyConfig(notifyConfig).build()); } @@ -158,7 +158,7 @@ public abstract class AbstractRobotSendMessageHandler implements SendMessageHand // 告警手机号 Joiner.on(robotMessageActualContent.getReceiveSeparator()).join(notifyConfig.getReceives().split(",")), // 当前时间 - DateUtil.now()); + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); execute(RobotMessageExecuteDTO.builder().text(text).notifyConfig(notifyConfig).build()); } } diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java index c0f0c500..c85b51ec 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java @@ -18,9 +18,9 @@ package cn.hippo4j.message.service; import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.toolkit.IdUtil; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.message.dto.AlarmControlDTO; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; @@ -52,12 +52,12 @@ public class AlarmControlHandler { return false; } String pkId = cache.getIfPresent(alarmControl.getTypeEnum().name()); - if (StrUtil.isBlank(pkId)) { + if (StringUtil.isBlank(pkId)) { ReentrantLock lock = threadPoolLock.get(threadPoolKey); lock.lock(); try { pkId = cache.getIfPresent(alarmControl.getTypeEnum().name()); - if (StrUtil.isBlank(pkId)) { + if (StringUtil.isBlank(pkId)) { // Val meaningless. cache.put(alarmControl.getTypeEnum().name(), IdUtil.simpleUUID()); return true; @@ -77,7 +77,7 @@ public class AlarmControlHandler { * @param interval */ public void initCacheAndLock(String threadPoolId, String platform, Integer interval) { - String threadPoolKey = StrUtil.builder(threadPoolId, Constants.GROUP_KEY_DELIMITER, platform).toString(); + String threadPoolKey = threadPoolId + Constants.GROUP_KEY_DELIMITER + platform; Cache cache = Caffeine.newBuilder() .expireAfterWrite(interval, TimeUnit.MINUTES) .build(); diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java index c6c98242..ca7af719 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java @@ -17,15 +17,14 @@ package cn.hippo4j.message.service; -import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.message.dto.AlarmControlDTO; import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.enums.NotifyTypeEnum; import cn.hippo4j.message.request.AlarmNotifyRequest; import cn.hippo4j.message.request.ChangeParameterNotifyRequest; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -54,9 +53,13 @@ public class Hippo4jBaseSendMessageService implements Hippo4jSendMessageService, @Override public void sendAlarmMessage(NotifyTypeEnum typeEnum, AlarmNotifyRequest alarmNotifyRequest) { String threadPoolId = alarmNotifyRequest.getThreadPoolId(); - String buildKey = StrUtil.builder(threadPoolId, "+", "ALARM").toString(); + String buildKey = new StringBuilder() + .append(threadPoolId) + .append("+") + .append("ALARM") + .toString(); List notifyList = notifyConfigs.get(buildKey); - if (CollUtil.isEmpty(notifyList)) { + if (CollectionUtil.isEmpty(notifyList)) { return; } notifyList.forEach(each -> { @@ -79,9 +82,13 @@ public class Hippo4jBaseSendMessageService implements Hippo4jSendMessageService, @Override public void sendChangeMessage(ChangeParameterNotifyRequest changeParameterNotifyRequest) { String threadPoolId = changeParameterNotifyRequest.getThreadPoolId(); - String buildKey = StrUtil.builder(threadPoolId, "+", "CONFIG").toString(); + String buildKey = new StringBuilder() + .append(threadPoolId) + .append("+") + .append("CONFIG") + .toString(); List notifyList = notifyConfigs.get(buildKey); - if (CollUtil.isEmpty(notifyList)) { + if (CollectionUtil.isEmpty(notifyList)) { log.warn("Please configure alarm notification on the server. key: [{}]", threadPoolId); return; } diff --git a/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java index b75a4b76..505712c4 100644 --- a/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java @@ -19,11 +19,11 @@ package cn.hippo4j.monitor.es; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.BeanUtil; +import cn.hippo4j.common.toolkit.FileUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; import cn.hippo4j.monitor.es.model.EsThreadPoolRunStateInfo; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.io.FileUtil; import cn.hippo4j.monitor.base.AbstractDynamicThreadPoolMonitor; import cn.hippo4j.monitor.base.MonitorTypeEnum; import lombok.extern.slf4j.Slf4j; @@ -40,7 +40,6 @@ import org.elasticsearch.common.xcontent.XContentType; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; -import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.List; @@ -61,13 +60,12 @@ public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { @Override protected void execute(ThreadPoolRunStateInfo poolRunStateInfo) { - EsThreadPoolRunStateInfo esThreadPoolRunStateInfo = new EsThreadPoolRunStateInfo(); - BeanUtil.copyProperties(poolRunStateInfo, esThreadPoolRunStateInfo); + EsThreadPoolRunStateInfo esThreadPoolRunStateInfo = BeanUtil.convert(poolRunStateInfo, EsThreadPoolRunStateInfo.class); Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); String indexName = environment.getProperty("es.thread-pool-state.index.name", "thread-pool-state"); String applicationName = environment.getProperty("spring.application.name", "application"); if (!this.isExists(indexName)) { - List rawMapping = FileUtil.readLines(new File(Thread.currentThread().getContextClassLoader().getResource("mapping.json").getPath()), StandardCharsets.UTF_8); + List rawMapping = FileUtil.readLines(Thread.currentThread().getContextClassLoader().getResource("mapping.json").getPath(), StandardCharsets.UTF_8); String mapping = String.join(" ", rawMapping); // if index doesn't exsit, this function may try to create one, but recommend to create index manually. this.createIndex(indexName, "_doc", mapping, null, null, null); diff --git a/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java index 7c1b930c..844685b7 100644 --- a/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-micrometer/src/main/java/cn/hippo4j/monitor/micrometer/MicrometerMonitorHandler.java @@ -19,11 +19,11 @@ package cn.hippo4j.monitor.micrometer; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; import cn.hippo4j.monitor.base.AbstractDynamicThreadPoolMonitor; import cn.hippo4j.monitor.base.MonitorTypeEnum; -import cn.hutool.core.bean.BeanUtil; import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.Tag; import org.springframework.core.env.Environment; @@ -54,7 +54,7 @@ public class MicrometerMonitorHandler extends AbstractDynamicThreadPoolMonitor { if (stateInfo == null) { RUN_STATE_CACHE.put(poolRunStateInfo.getTpId(), poolRunStateInfo); } else { - BeanUtil.copyProperties(poolRunStateInfo, stateInfo); + BeanUtil.convert(poolRunStateInfo, stateInfo); } Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); String applicationName = environment.getProperty("spring.application.name", "application"); diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java index 46fa5579..28a5a510 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java @@ -22,7 +22,7 @@ import cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.monitor.base.DynamicThreadPoolMonitor; import cn.hippo4j.monitor.base.ThreadPoolMonitor; import lombok.RequiredArgsConstructor; diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java index d66e994d..9dba54a8 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java @@ -25,7 +25,6 @@ import cn.hippo4j.config.springboot.starter.config.NotifyPlatformProperties; import cn.hippo4j.message.api.NotifyConfigBuilder; import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.service.AlarmControlHandler; -import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -110,7 +109,7 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { public void initCacheAndLock(Map> buildSingleNotifyConfig) { buildSingleNotifyConfig.forEach( (key, val) -> val.stream() - .filter(each -> StrUtil.equals("ALARM", each.getType())) + .filter(each -> Objects.equals("ALARM", each.getType())) .forEach(each -> alarmControlHandler.initCacheAndLock(each.getTpId(), each.getPlatform(), each.getInterval()))); } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java index f5e84f22..9f4c1e0f 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapConfigPropertiesBinderAdapt.java @@ -17,14 +17,13 @@ package cn.hippo4j.config.springboot.starter.refresher; +import cn.hippo4j.common.toolkit.BeanUtil; import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import cn.hippo4j.config.springboot.starter.config.DynamicThreadPoolNotifyProperties; import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; import cn.hippo4j.config.springboot.starter.config.NotifyPlatformProperties; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.context.properties.source.ConfigurationPropertySource; @@ -131,10 +130,10 @@ public class BootstrapConfigPropertiesBinderAdapt { break; } if (CollectionUtil.isNotEmpty(executorSingleMap)) { - ExecutorProperties executorProperties = BeanUtil.mapToBean(executorSingleMap, ExecutorProperties.class, true, CopyOptions.create()); + ExecutorProperties executorProperties = BeanUtil.mapToBean(executorSingleMap, ExecutorProperties.class, true); if (executorProperties != null) { if (CollectionUtil.isNotEmpty(notifySingleMap)) { - DynamicThreadPoolNotifyProperties alarm = BeanUtil.mapToBean(notifySingleMap, DynamicThreadPoolNotifyProperties.class, true, CopyOptions.create()); + DynamicThreadPoolNotifyProperties alarm = BeanUtil.mapToBean(notifySingleMap, DynamicThreadPoolNotifyProperties.class, true); alarm.setReceives(alarm.getReceives()); executorProperties.setNotify(alarm); } @@ -142,7 +141,7 @@ public class BootstrapConfigPropertiesBinderAdapt { } } if (CollectionUtil.isNotEmpty(platformSingleMap)) { - NotifyPlatformProperties notifyPlatformProperties = BeanUtil.mapToBean(platformSingleMap, NotifyPlatformProperties.class, true, CopyOptions.create()); + NotifyPlatformProperties notifyPlatformProperties = BeanUtil.mapToBean(platformSingleMap, NotifyPlatformProperties.class, true); if (notifyPlatformProperties != null) { notifyPropertiesList.add(notifyPlatformProperties); } 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 552a1f69..e0a2dde2 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 @@ -20,11 +20,12 @@ package cn.hippo4j.config.springboot.starter.refresher.event; import cn.hippo4j.adapter.base.ThreadPoolAdapter; import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; 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 cn.hutool.core.bean.BeanUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.core.annotation.Order; import java.util.List; @@ -63,7 +64,7 @@ public class AdapterExecutorsRefreshListener extends AbstractRefreshListener { if (Objects.equals(val.mark(), each.getMark())) { - val.updateThreadPool(BeanUtil.toBean(each, ThreadPoolAdapterParameter.class)); + val.updateThreadPool(BeanUtil.convert(each, ThreadPoolAdapterParameter.class)); DynamicThreadPoolAdapterRegister.ADAPTER_EXECUTORS_MAP.put(buildKey, each); } }); diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java index 255a28e1..f46f102b 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java @@ -24,7 +24,6 @@ import cn.hippo4j.core.toolkit.inet.InetUtils; import cn.hippo4j.springboot.starter.toolkit.CloudCommonIdUtil; import cn.hippo4j.springboot.starter.core.DiscoveryClient; import cn.hippo4j.springboot.starter.remote.HttpAgent; -import cn.hutool.core.text.StrBuilder; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import org.springframework.context.annotation.Bean; @@ -57,7 +56,11 @@ public class DiscoveryConfiguration { String active = environment.getProperty("spring.profiles.active", "UNKNOWN"); InstanceInfo instanceInfo = new InstanceInfo(); String instanceId = CloudCommonIdUtil.getDefaultInstanceId(environment, hippo4JInetUtils); - instanceId = StrBuilder.create().append(instanceId).append(IDENTIFY_SLICER_SYMBOL).append(CLIENT_IDENTIFICATION_VALUE).toString(); + instanceId = new StringBuilder() + .append(instanceId) + .append(IDENTIFY_SLICER_SYMBOL) + .append(CLIENT_IDENTIFICATION_VALUE) + .toString(); String contextPath = environment.getProperty("server.servlet.context-path", ""); instanceInfo.setInstanceId(instanceId) .setIpApplicationName(CloudCommonIdUtil.getIpApplicationName(environment, hippo4JInetUtils)) diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java index 9ffb4908..a3840073 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java @@ -20,23 +20,18 @@ package cn.hippo4j.springboot.starter.core; import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.toolkit.ContentUtil; import cn.hippo4j.common.toolkit.GroupKey; +import cn.hippo4j.common.toolkit.IdUtil; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.springboot.starter.remote.HttpAgent; import cn.hippo4j.springboot.starter.remote.ServerHealthCheck; -import cn.hutool.core.util.IdUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java index f9e8824a..0bc94ea3 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java @@ -24,13 +24,12 @@ import cn.hippo4j.common.model.InstanceInfo; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.common.web.exception.ErrorCodeEnum; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.springboot.starter.remote.HttpAgent; -import cn.hutool.core.text.StrBuilder; -import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; +import java.util.Objects; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -93,7 +92,7 @@ public class DiscoveryClient implements DisposableBean { String clientCloseUrlPath = Constants.BASE_PATH + "/client/close"; Result clientCloseResult; try { - String groupKeyIp = StrBuilder.create() + String groupKeyIp = new StringBuilder() .append(instanceInfo.getGroupKey()) .append(Constants.GROUP_KEY_DELIMITER) .append(instanceInfo.getIdentify()) @@ -133,7 +132,7 @@ public class DiscoveryClient implements DisposableBean { .setLastDirtyTimestamp(instanceInfo.getLastDirtyTimestamp().toString()) .setStatus(instanceInfo.getStatus().toString()); renewResult = httpAgent.httpPostByDiscovery(BASE_PATH + "/apps/renew", instanceRenew); - if (StrUtil.equals(ErrorCodeEnum.NOT_FOUND.getCode(), renewResult.getCode())) { + if (Objects.equals(ErrorCodeEnum.NOT_FOUND.getCode(), renewResult.getCode())) { long timestamp = instanceInfo.setIsDirtyWithTime(); boolean success = register(); // TODO Abstract server registration logic diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java index cbbf8293..6bad05c3 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java @@ -24,7 +24,7 @@ import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.toolkit.ThreadUtil; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.monitor.base.DynamicThreadPoolMonitor; import cn.hippo4j.monitor.base.MonitorTypeEnum; import cn.hippo4j.monitor.base.ThreadPoolMonitor; @@ -32,7 +32,6 @@ import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.springboot.starter.monitor.collect.Collector; import cn.hippo4j.springboot.starter.monitor.send.MessageSender; import cn.hippo4j.springboot.starter.remote.ServerHealthCheck; -import cn.hutool.core.collection.CollUtil; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -162,7 +161,7 @@ public class ReportingEventExecutor implements Runnable, CommandLineRunner, Disp */ private void runTimeGatherTask() { boolean healthStatus = serverHealthCheck.isHealthStatus(); - if (!healthStatus || CollUtil.isEmpty(collectors)) { + if (!healthStatus || CollectionUtil.isEmpty(collectors)) { return; } collectors.forEach((beanName, collector) -> { diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java index c09b57f7..33fc7259 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java @@ -22,10 +22,11 @@ import cn.hippo4j.common.monitor.AbstractMessage; import cn.hippo4j.common.monitor.Message; import cn.hippo4j.common.monitor.MessageTypeEnum; import cn.hippo4j.common.monitor.RuntimeMessage; +import cn.hippo4j.common.toolkit.BeanUtil; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; import cn.hippo4j.springboot.starter.config.BootstrapProperties; -import cn.hutool.core.bean.BeanUtil; import lombok.AllArgsConstructor; import java.util.ArrayList; @@ -48,7 +49,7 @@ public class RunTimeInfoCollector extends AbstractThreadPoolRuntime implements C List listThreadPoolId = GlobalThreadPoolManage.listThreadPoolId(); for (String each : listThreadPoolId) { ThreadPoolRunStateInfo poolRunState = getPoolRunState(each); - RuntimeMessage runtimeMessage = BeanUtil.toBean(poolRunState, RuntimeMessage.class); + RuntimeMessage runtimeMessage = BeanUtil.convert(poolRunState, RuntimeMessage.class); runtimeMessage.setGroupKey(getThreadPoolIdentify(each, properties.getItemId(), properties.getNamespace())); runtimeMessages.add(runtimeMessage); } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java index 8aeade7a..53ec96fb 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java @@ -17,6 +17,7 @@ package cn.hippo4j.springboot.starter.notify; +import cn.hippo4j.common.toolkit.CollectionUtil; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.web.base.Result; @@ -28,8 +29,6 @@ import cn.hippo4j.message.request.ThreadPoolNotifyRequest; import cn.hippo4j.message.service.AlarmControlHandler; import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.springboot.starter.remote.HttpAgent; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -37,6 +36,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import static cn.hippo4j.common.constant.Constants.BASE_PATH; @@ -56,7 +56,7 @@ public class ServerNotifyConfigBuilder implements NotifyConfigBuilder { @Override public Map> buildNotify() { List threadPoolIds = GlobalThreadPoolManage.listThreadPoolId(); - if (CollUtil.isEmpty(threadPoolIds)) { + if (CollectionUtil.isEmpty(threadPoolIds)) { log.warn("The client does not have a dynamic thread pool instance configured."); return new HashMap<>(); } @@ -81,7 +81,7 @@ public class ServerNotifyConfigBuilder implements NotifyConfigBuilder { List resultData = JSONUtil.parseArray(resultDataStr, ThreadPoolNotifyDTO.class); resultData.forEach(each -> resultMap.put(each.getNotifyKey(), each.getNotifyList())); - resultMap.forEach((key, val) -> val.stream().filter(each -> StrUtil.equals("ALARM", each.getType())) + resultMap.forEach((key, val) -> val.stream().filter(each -> Objects.equals("ALARM", each.getType())) .forEach(each -> alarmControlHandler.initCacheAndLock(each.getTpId(), each.getPlatform(), each.getInterval()))); } return resultMap; diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java index 3ca23f0e..b79595b5 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java @@ -20,7 +20,7 @@ package cn.hippo4j.springboot.starter.remote; import cn.hippo4j.common.toolkit.ThreadUtil; import cn.hippo4j.springboot.starter.event.ApplicationCompleteEvent; import cn.hippo4j.springboot.starter.core.ShutdownExecuteException; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.InitializingBean; diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java index 3a02f4cb..9a2d6bff 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java @@ -19,12 +19,12 @@ package cn.hippo4j.springboot.starter.remote; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; import cn.hippo4j.springboot.starter.config.BootstrapProperties; import cn.hippo4j.springboot.starter.security.SecurityProxy; import cn.hippo4j.springboot.starter.toolkit.HttpClientUtil; -import cn.hutool.core.util.StrUtil; import java.util.HashMap; import java.util.Map; @@ -133,7 +133,7 @@ public class ServerHttpAgent implements HttpAgent { } private Map injectSecurityInfo(Map params) { - if (StrUtil.isNotBlank(securityProxy.getAccessToken())) { + if (StringUtil.isNotBlank(securityProxy.getAccessToken())) { params.put(Constants.ACCESS_TOKEN, securityProxy.getAccessToken()); } return params; diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java index f3d72823..5166cd9b 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java @@ -17,8 +17,8 @@ package cn.hippo4j.springboot.starter.remote; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.springboot.starter.config.BootstrapProperties; -import cn.hutool.core.util.StrUtil; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; @@ -56,7 +56,7 @@ public class ServerListManager { List serverAddrList = new ArrayList(); String[] serverAddrListArr = this.serverAddrsStr.split(","); for (String serverAddr : serverAddrListArr) { - boolean whetherJoint = StrUtil.isNotBlank(serverAddr) + boolean whetherJoint = StringUtil.isNotBlank(serverAddr) && !serverAddr.startsWith(HTTPS) && !serverAddr.startsWith(HTTP); if (whetherJoint) { serverAddr = HTTP + serverAddr; diff --git a/pom.xml b/pom.xml index d3955299..d7a593b3 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,6 @@ 2.9.3 30.0-jre 3.12.0 - 5.4.7 3.12.0 6.1.5.Final 2.12.1 @@ -90,11 +89,6 @@ okhttp ${okhttp3.version} - - cn.hutool - hutool-all - ${hutool-all.version} - org.apache.commons commons-lang3 From c9e28a632bd1f5966d1a56072ab0801d6c4147b2 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 12:39:35 +0800 Subject: [PATCH 21/30] Changed hippo4j database upgrade script (#737) --- hippo4j-server/conf/hippo4j_manager.sql | 51 ++++++------------- .../conf/sql-upgrade/1.4.2_upgrade.sql | 9 ++++ .../sql-script/h2/hippo4j_manager.sql | 12 ++--- .../sql-script/mysql/hippo4j_manager.sql | 18 +++---- 4 files changed, 38 insertions(+), 52 deletions(-) create mode 100644 hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql diff --git a/hippo4j-server/conf/hippo4j_manager.sql b/hippo4j-server/conf/hippo4j_manager.sql index f3b4850e..1a7191bb 100644 --- a/hippo4j-server/conf/hippo4j_manager.sql +++ b/hippo4j-server/conf/hippo4j_manager.sql @@ -17,8 +17,7 @@ CREATE TABLE `tenant` ( `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', `del_flag` tinyint(1) DEFAULT NULL COMMENT '是否删除', PRIMARY KEY (`id`), - UNIQUE KEY `id` (`id`), - KEY `uk_tenantinfo_tenantid` (`tenant_id`,`del_flag`) USING BTREE + UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='租户表'; /******************************************/ @@ -37,8 +36,7 @@ CREATE TABLE `item` ( `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', `del_flag` tinyint(1) DEFAULT NULL COMMENT '是否删除', PRIMARY KEY (`id`), - UNIQUE KEY `id` (`id`), - UNIQUE KEY `uk_iteminfo_tenantitem` (`tenant_id`,`item_id`,`del_flag`) USING BTREE + UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='项目表'; /******************************************/ @@ -50,14 +48,15 @@ CREATE TABLE `config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `tp_name` varchar(56) DEFAULT NULL COMMENT '线程池名称', `core_size` int(11) DEFAULT NULL COMMENT '核心线程数', `max_size` int(11) DEFAULT NULL COMMENT '最大线程数', `queue_type` int(11) DEFAULT NULL COMMENT '队列类型...', `capacity` int(11) DEFAULT NULL COMMENT '队列大小', `rejected_type` int(11) DEFAULT NULL COMMENT '拒绝策略', - `keep_alive_time` int(11) DEFAULT NULL COMMENT '线程存活时间', + `keep_alive_time` int(11) DEFAULT NULL COMMENT '线程存活时间(秒)', + `execute_time_out` int(11) DEFAULT NULL COMMENT '执行超时时间(毫秒)', `allow_core_thread_time_out` tinyint(1) DEFAULT NULL COMMENT '允许核心线程超时', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', @@ -68,8 +67,7 @@ CREATE TABLE `config` ( `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `del_flag` tinyint(1) DEFAULT NULL COMMENT '是否删除', PRIMARY KEY (`id`), - UNIQUE KEY `id` (`id`), - UNIQUE KEY `uk_configinfo_datagrouptenant` (`tenant_id`,`item_id`,`tp_id`,`del_flag`) USING BTREE + UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='线程池配置表'; /******************************************/ @@ -81,7 +79,7 @@ CREATE TABLE `inst_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', @@ -102,7 +100,7 @@ CREATE TABLE `his_run_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', @@ -195,8 +193,8 @@ DROP TABLE IF EXISTS `alarm`, `notify`; CREATE TABLE `notify` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT '租户ID', - `item_id` varchar(128) NOT NULL COMMENT '项目ID', - `tp_id` varchar(128) NOT NULL COMMENT '线程池ID', + `item_id` varchar(256) NOT NULL COMMENT '项目ID', + `tp_id` varchar(256) NOT NULL COMMENT '线程池ID', `platform` varchar(32) NOT NULL COMMENT '通知平台', `type` varchar(32) NOT NULL COMMENT '通知类型', `secret_key` varchar(256) NOT NULL COMMENT '密钥', @@ -210,30 +208,13 @@ CREATE TABLE `notify` ( UNIQUE KEY `uk_notify_biz_key` (`tenant_id`,`item_id`,`tp_id`,`platform`,`type`,`del_flag`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知表'; -/* 租户 */ -INSERT INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0'); - -/* 项目 */ -INSERT INTO `item` (`id`, `tenant_id`, `item_id`, `item_name`, `item_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', '动态线程池示例项目', '动态线程池示例项目,对应 Hippo 项目的 example 模块', '马称', '2021-10-24 16:11:00', '2021-10-24 16:11:00', '0'); - -/* 线程池 */ -INSERT INTO `config` (`id`, `tenant_id`, `item_id`, `tp_id`, `tp_name`, `core_size`, `max_size`, `queue_type`, `capacity`, `rejected_type`, `keep_alive_time`, `allow_core_thread_time_out`, `content`, `md5`, `is_alarm`, `capacity_alarm`, `liveness_alarm`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-consume', '示例消费者线程池', '5', '10', '9', '1024', '2', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-consume\",\"coreSize\":5,\"maxSize\":10,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":2,\"isAlarm\":0,\"capacityAlarm\":80,\"livenessAlarm\":80,\"allowCoreThreadTimeOut\":0}', 'f80ea89044889fb6cec20e1a517f2ec3', '0', '80', '80', '2021-10-24 10:24:00', '2021-12-22 08:58:55', '0'), -('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', '示例生产者线程池', '5', '15', '9', '1024', '1', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-produce\",\"coreSize\":5,\"maxSize\":15,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":1,\"isAlarm\":0,\"capacityAlarm\":30,\"livenessAlarm\":30,\"allowCoreThreadTimeOut\":0}', '525e1429468bcfe98df7e70a75710051', '0', '30', '30', '2021-10-24 10:24:00', '2021-12-22 08:59:02', '0'); +/* Init SQL */ +INSERT IGNORE INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0'); -/* 用户 */ -INSERT INTO `user` (`id`, `user_name`, `password`, `role`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'admin', '$2a$10$2KCqRbra0Yn2TwvkZxtfLuWuUP5KyCWsljO/ci5pLD27pqR3TV1vy', 'ROLE_ADMIN', '2021-11-04 21:35:17', '2021-11-15 23:04:59', '0'); +INSERT IGNORE INTO `item` (`id`, `tenant_id`, `item_id`, `item_name`, `item_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', '动态线程池示例项目', '动态线程池示例项目,对应 Hippo 项目的 example 模块', '马称', '2021-10-24 16:11:00', '2021-10-24 16:11:00', '0'); -/* 通知表 */ -INSERT INTO `notify` (`id`, `tenant_id`, `item_id`, `tp_id`, `platform`, `type`, `secret_key`, `interval`, `receives`, `enable`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'CONFIG', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', NULL, '15601166691', '0', '2021-11-18 22:49:50', '2021-11-18 22:49:50', '0'), -('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'ALARM', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', '30', '15601166691', '0', '2021-11-18 22:50:06', '2021-11-18 22:50:06', '0'); +INSERT IGNORE INTO `config` (`id`, `tenant_id`, `item_id`, `tp_id`, `tp_name`, `core_size`, `max_size`, `queue_type`, `capacity`, `rejected_type`, `keep_alive_time`, `allow_core_thread_time_out`, `content`, `md5`, `is_alarm`, `capacity_alarm`, `liveness_alarm`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-consume', '示例消费者线程池', '5', '10', '9', '1024', '2', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-consume\",\"coreSize\":5,\"maxSize\":10,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":2,\"isAlarm\":0,\"capacityAlarm\":80,\"livenessAlarm\":80,\"allowCoreThreadTimeOut\":0}', 'f80ea89044889fb6cec20e1a517f2ec3', '0', '80', '80', '2021-10-24 10:24:00', '2021-12-22 08:58:55', '0'), ('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', '示例生产者线程池', '5', '15', '9', '1024', '1', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-produce\",\"coreSize\":5,\"maxSize\":15,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":1,\"isAlarm\":0,\"capacityAlarm\":30,\"livenessAlarm\":30,\"allowCoreThreadTimeOut\":0}', '525e1429468bcfe98df7e70a75710051', '0', '30', '30', '2021-10-24 10:24:00', '2021-12-22 08:59:02', '0'); -/* 1.1.0 Upgrade Start */ -ALTER TABLE `config` DROP INDEX `uk_configinfo_datagrouptenant`; -ALTER TABLE `item` DROP INDEX `uk_iteminfo_tenantitem`; -ALTER TABLE `tenant` DROP INDEX `uk_tenantinfo_tenantid`; -/* 1.1.0 Upgrade End */ +INSERT IGNORE INTO `user` (`id`, `user_name`, `password`, `role`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'admin', '$2a$10$2KCqRbra0Yn2TwvkZxtfLuWuUP5KyCWsljO/ci5pLD27pqR3TV1vy', 'ROLE_ADMIN', '2021-11-04 21:35:17', '2021-11-15 23:04:59', '0'); -/* 1.4.0 Upgrade Start */ -ALTER TABLE config Modify COLUMN keep_alive_time int(11) COMMENT '线程存活时间(秒)'; -ALTER TABLE config Add execute_time_out int(11) COMMENT '执行超时时间(毫秒)' AFTER keep_alive_time; -/* 1.4.0 Upgrade Start */ +INSERT IGNORE INTO `notify` (`id`, `tenant_id`, `item_id`, `tp_id`, `platform`, `type`, `secret_key`, `interval`, `receives`, `enable`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'CONFIG', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', NULL, '15601166691', '0', '2021-11-18 22:49:50', '2021-11-18 22:49:50', '0'), ('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'ALARM', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', '30', '15601166691', '0', '2021-11-18 22:50:06', '2021-11-18 22:50:06', '0'); diff --git a/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql b/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql new file mode 100644 index 00000000..cdb30966 --- /dev/null +++ b/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql @@ -0,0 +1,9 @@ +ALTER TABLE config Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; + +ALTER TABLE inst_config Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; + +ALTER TABLE his_run_data Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; + +ALTER TABLE notify Modify COLUMN item_id varchar(256) COMMENT '项目ID'; + +ALTER TABLE notify Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; diff --git a/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql b/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql index 6db62ec4..e3ebe3a9 100755 --- a/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql +++ b/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS `tenant` ( CREATE TABLE IF NOT EXISTS `item` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', `item_name` varchar(128) DEFAULT NULL COMMENT '项目名称', `item_desc` varchar(256) DEFAULT NULL COMMENT '项目介绍', `owner` varchar(32) DEFAULT NULL COMMENT '负责人', @@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS `config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `tp_name` varchar(56) DEFAULT NULL COMMENT '线程池名称', `core_size` int(11) DEFAULT NULL COMMENT '核心线程数', `max_size` int(11) DEFAULT NULL COMMENT '最大线程数', @@ -52,7 +52,7 @@ CREATE TABLE IF NOT EXISTS `inst_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', @@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS `his_run_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', @@ -130,8 +130,8 @@ CREATE TABLE IF NOT EXISTS `permission` ( CREATE TABLE IF NOT EXISTS `notify` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT '租户ID', - `item_id` varchar(128) NOT NULL COMMENT '项目ID', - `tp_id` varchar(128) NOT NULL COMMENT '线程池ID', + `item_id` varchar(256) NOT NULL COMMENT '项目ID', + `tp_id` varchar(256) NOT NULL COMMENT '线程池ID', `platform` varchar(32) NOT NULL COMMENT '通知平台', `type` varchar(32) NOT NULL COMMENT '通知类型', `secret_key` varchar(256) NOT NULL COMMENT '密钥', diff --git a/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql b/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql index 348dc009..c111b26f 100644 --- a/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql +++ b/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql @@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS `tenant` ( CREATE TABLE IF NOT EXISTS `item` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', `item_name` varchar(128) DEFAULT NULL COMMENT '项目名称', `item_desc` varchar(256) DEFAULT NULL COMMENT '项目介绍', `owner` varchar(32) DEFAULT NULL COMMENT '负责人', @@ -45,7 +45,7 @@ CREATE TABLE IF NOT EXISTS `config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `tp_name` varchar(56) DEFAULT NULL COMMENT '线程池名称', `core_size` int(11) DEFAULT NULL COMMENT '核心线程数', `max_size` int(11) DEFAULT NULL COMMENT '最大线程数', @@ -75,7 +75,7 @@ CREATE TABLE IF NOT EXISTS `inst_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', @@ -95,7 +95,7 @@ CREATE TABLE IF NOT EXISTS `his_run_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', - `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', @@ -183,8 +183,8 @@ CREATE TABLE IF NOT EXISTS `permission` ( CREATE TABLE IF NOT EXISTS `notify` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT '租户ID', - `item_id` varchar(128) NOT NULL COMMENT '项目ID', - `tp_id` varchar(128) NOT NULL COMMENT '线程池ID', + `item_id` varchar(256) NOT NULL COMMENT '项目ID', + `tp_id` varchar(256) NOT NULL COMMENT '线程池ID', `platform` varchar(32) NOT NULL COMMENT '通知平台', `type` varchar(32) NOT NULL COMMENT '通知类型', `secret_key` varchar(256) NOT NULL COMMENT '密钥', @@ -198,17 +198,13 @@ CREATE TABLE IF NOT EXISTS `notify` ( UNIQUE KEY `uk_notify_biz_key` (`tenant_id`,`item_id`,`tp_id`,`platform`,`type`,`del_flag`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知表'; -/* 租户 */ +/* Init SQL */ INSERT IGNORE INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0'); -/* 项目 */ INSERT IGNORE INTO `item` (`id`, `tenant_id`, `item_id`, `item_name`, `item_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', '动态线程池示例项目', '动态线程池示例项目,对应 Hippo 项目的 example 模块', '马称', '2021-10-24 16:11:00', '2021-10-24 16:11:00', '0'); -/* 线程池 */ INSERT IGNORE INTO `config` (`id`, `tenant_id`, `item_id`, `tp_id`, `tp_name`, `core_size`, `max_size`, `queue_type`, `capacity`, `rejected_type`, `keep_alive_time`, `allow_core_thread_time_out`, `content`, `md5`, `is_alarm`, `capacity_alarm`, `liveness_alarm`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-consume', '示例消费者线程池', '5', '10', '9', '1024', '2', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-consume\",\"coreSize\":5,\"maxSize\":10,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":2,\"isAlarm\":0,\"capacityAlarm\":80,\"livenessAlarm\":80,\"allowCoreThreadTimeOut\":0}', 'f80ea89044889fb6cec20e1a517f2ec3', '0', '80', '80', '2021-10-24 10:24:00', '2021-12-22 08:58:55', '0'), ('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', '示例生产者线程池', '5', '15', '9', '1024', '1', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-produce\",\"coreSize\":5,\"maxSize\":15,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":1,\"isAlarm\":0,\"capacityAlarm\":30,\"livenessAlarm\":30,\"allowCoreThreadTimeOut\":0}', '525e1429468bcfe98df7e70a75710051', '0', '30', '30', '2021-10-24 10:24:00', '2021-12-22 08:59:02', '0'); -/* 用户 */ INSERT IGNORE INTO `user` (`id`, `user_name`, `password`, `role`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'admin', '$2a$10$2KCqRbra0Yn2TwvkZxtfLuWuUP5KyCWsljO/ci5pLD27pqR3TV1vy', 'ROLE_ADMIN', '2021-11-04 21:35:17', '2021-11-15 23:04:59', '0'); -/* 通知表 */ INSERT IGNORE INTO `notify` (`id`, `tenant_id`, `item_id`, `tp_id`, `platform`, `type`, `secret_key`, `interval`, `receives`, `enable`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'CONFIG', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', NULL, '15601166691', '0', '2021-11-18 22:49:50', '2021-11-18 22:49:50', '0'), ('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'ALARM', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', '30', '15601166691', '0', '2021-11-18 22:50:06', '2021-11-18 22:50:06', '0'); From 464d616aadd55de446d05217ab2bd3b6c64df406 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 14:08:38 +0800 Subject: [PATCH 22/30] Change the sample project configuration --- .../core/config/DynamicThreadPoolConfig.java | 33 +++++++------------ 1 file changed, 11 insertions(+), 22 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 f59432ec..63d5331d 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 @@ -17,19 +17,19 @@ package cn.hippo4j.example.core.config; -import java.util.concurrent.Executor; -import java.util.concurrent.ThreadPoolExecutor; - -import cn.hippo4j.core.executor.SpringDynamicThreadPool; +import cn.hippo4j.core.executor.DynamicThreadPool; import cn.hippo4j.core.executor.support.ThreadPoolBuilder; import cn.hippo4j.example.core.handler.TaskTraceBuilderHandler; import cn.hippo4j.example.core.inittest.TaskDecoratorTest; import com.alibaba.ttl.threadpool.TtlExecutors; import lombok.extern.slf4j.Slf4j; - +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + import static cn.hippo4j.common.constant.Constants.AVAILABLE_PROCESSORS; import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_CONSUME; import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_PRODUCE; @@ -41,7 +41,8 @@ import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_PRODUC @Configuration public class DynamicThreadPoolConfig { - @SpringDynamicThreadPool + @Bean + @DynamicThreadPool public Executor messageConsumeTtlDynamicThreadPool() { String threadPoolId = MESSAGE_CONSUME; ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() @@ -58,22 +59,10 @@ public class DynamicThreadPoolConfig { return ttlExecutor; } - @SpringDynamicThreadPool + @Bean + @DynamicThreadPool public ThreadPoolExecutor messageProduceDynamicThreadPool() { - String threadPoolId = MESSAGE_PRODUCE; - ThreadPoolExecutor produceExecutor = ThreadPoolBuilder.builder() - .dynamicPool() - .threadFactory(threadPoolId) - .threadPoolId(threadPoolId) - .executeTimeOut(900L) - .waitForTasksToCompleteOnShutdown(true) - .awaitTerminationMillis(5000L) - /** - * Context passing, test cases: {@link TaskDecoratorTest} - */ - .taskDecorator(new TaskDecoratorTest.ContextCopyingDecorator()) - .build(); - return produceExecutor; + return ThreadPoolBuilder.builderDynamicPoolById(MESSAGE_PRODUCE); } /** @@ -82,7 +71,7 @@ public class DynamicThreadPoolConfig { * @return */ // @Bean - @SpringDynamicThreadPool + @DynamicThreadPool public ThreadPoolTaskExecutor testSpringThreadPoolTaskExecutor() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.setThreadNamePrefix("test-spring-task-executor_"); From 508e8947580f599660140891569a710737f264d4 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 14:24:25 +0800 Subject: [PATCH 23/30] Adaptation index maximum length --- hippo4j-server/conf/hippo4j_manager.sql | 12 ++++++------ hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql | 12 ++++++++++-- .../resources/sql-script/h2/hippo4j_manager.sql | 14 +++++++------- .../resources/sql-script/mysql/hippo4j_manager.sql | 12 ++++++------ 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/hippo4j-server/conf/hippo4j_manager.sql b/hippo4j-server/conf/hippo4j_manager.sql index 1a7191bb..dd21c444 100644 --- a/hippo4j-server/conf/hippo4j_manager.sql +++ b/hippo4j-server/conf/hippo4j_manager.sql @@ -47,7 +47,7 @@ DROP TABLE IF EXISTS `config`, `config_info`; CREATE TABLE `config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `tp_name` varchar(56) DEFAULT NULL COMMENT '线程池名称', `core_size` int(11) DEFAULT NULL COMMENT '核心线程数', @@ -78,9 +78,9 @@ DROP TABLE IF EXISTS `inst_config`; CREATE TABLE `inst_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', - `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `instance_id` varchar(64) DEFAULT NULL COMMENT '实例ID', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -99,9 +99,9 @@ DROP TABLE IF EXISTS `his_run_data`; CREATE TABLE `his_run_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', - `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `instance_id` varchar(64) DEFAULT NULL COMMENT '实例ID', `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', `pool_size` bigint(20) DEFAULT NULL COMMENT '线程数', @@ -193,7 +193,7 @@ DROP TABLE IF EXISTS `alarm`, `notify`; CREATE TABLE `notify` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT '租户ID', - `item_id` varchar(256) NOT NULL COMMENT '项目ID', + `item_id` varchar(128) NOT NULL COMMENT '项目ID', `tp_id` varchar(256) NOT NULL COMMENT '线程池ID', `platform` varchar(32) NOT NULL COMMENT '通知平台', `type` varchar(32) NOT NULL COMMENT '通知类型', diff --git a/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql b/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql index cdb30966..e0a718b0 100644 --- a/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql +++ b/hippo4j-server/conf/sql-upgrade/1.4.2_upgrade.sql @@ -1,9 +1,17 @@ +ALTER TABLE config Modify COLUMN item_id varchar(128) COMMENT '项目ID'; + +ALTER TABLE inst_config Modify COLUMN item_id varchar(128) COMMENT '项目ID'; + +ALTER TABLE inst_config Modify COLUMN instance_id varchar(64) COMMENT '实例ID'; + +ALTER TABLE his_run_data Modify COLUMN item_id varchar(128) COMMENT '项目ID'; + +ALTER TABLE his_run_data Modify COLUMN instance_id varchar(64) COMMENT '实例ID'; + ALTER TABLE config Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; ALTER TABLE inst_config Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; ALTER TABLE his_run_data Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; -ALTER TABLE notify Modify COLUMN item_id varchar(256) COMMENT '项目ID'; - ALTER TABLE notify Modify COLUMN tp_id varchar(256) COMMENT '线程池ID'; diff --git a/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql b/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql index e3ebe3a9..c88c39e8 100755 --- a/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql +++ b/hippo4j-server/src/main/resources/sql-script/h2/hippo4j_manager.sql @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS `tenant` ( CREATE TABLE IF NOT EXISTS `item` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `item_name` varchar(128) DEFAULT NULL COMMENT '项目名称', `item_desc` varchar(256) DEFAULT NULL COMMENT '项目介绍', `owner` varchar(32) DEFAULT NULL COMMENT '负责人', @@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS `item` ( CREATE TABLE IF NOT EXISTS `config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `tp_name` varchar(56) DEFAULT NULL COMMENT '线程池名称', `core_size` int(11) DEFAULT NULL COMMENT '核心线程数', @@ -51,9 +51,9 @@ CREATE TABLE IF NOT EXISTS `config` ( CREATE TABLE IF NOT EXISTS `inst_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', - `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `instance_id` varchar(64) DEFAULT NULL COMMENT '实例ID', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -64,9 +64,9 @@ CREATE TABLE IF NOT EXISTS `inst_config` ( CREATE TABLE IF NOT EXISTS `his_run_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', - `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `instance_id` varchar(64) DEFAULT NULL COMMENT '实例ID', `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', `pool_size` bigint(20) DEFAULT NULL COMMENT '线程数', @@ -130,7 +130,7 @@ CREATE TABLE IF NOT EXISTS `permission` ( CREATE TABLE IF NOT EXISTS `notify` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT '租户ID', - `item_id` varchar(256) NOT NULL COMMENT '项目ID', + `item_id` varchar(128) NOT NULL COMMENT '项目ID', `tp_id` varchar(256) NOT NULL COMMENT '线程池ID', `platform` varchar(32) NOT NULL COMMENT '通知平台', `type` varchar(32) NOT NULL COMMENT '通知类型', diff --git a/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql b/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql index c111b26f..2942b01b 100644 --- a/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql +++ b/hippo4j-server/src/main/resources/sql-script/mysql/hippo4j_manager.sql @@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS `tenant` ( CREATE TABLE IF NOT EXISTS `item` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `item_name` varchar(128) DEFAULT NULL COMMENT '项目名称', `item_desc` varchar(256) DEFAULT NULL COMMENT '项目介绍', `owner` varchar(32) DEFAULT NULL COMMENT '负责人', @@ -44,7 +44,7 @@ CREATE TABLE IF NOT EXISTS `item` ( CREATE TABLE IF NOT EXISTS `config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', `tp_name` varchar(56) DEFAULT NULL COMMENT '线程池名称', `core_size` int(11) DEFAULT NULL COMMENT '核心线程数', @@ -74,9 +74,9 @@ CREATE TABLE IF NOT EXISTS `config` ( CREATE TABLE IF NOT EXISTS `inst_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', - `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `instance_id` varchar(64) DEFAULT NULL COMMENT '实例ID', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -94,9 +94,9 @@ CREATE TABLE IF NOT EXISTS `inst_config` ( CREATE TABLE IF NOT EXISTS `his_run_data` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', - `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `item_id` varchar(128) DEFAULT NULL COMMENT '项目ID', `tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID', - `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `instance_id` varchar(64) DEFAULT NULL COMMENT '实例ID', `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', `pool_size` bigint(20) DEFAULT NULL COMMENT '线程数', From 76f1651f5853acff14d87a0cdb048609c7d9785b Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 14:50:48 +0800 Subject: [PATCH 24/30] Fix SpringDynamicThreadPool does not take effect --- .../hippo4j/core/executor/DynamicThreadPool.java | 5 +++-- .../core/executor/SpringDynamicThreadPool.java | 14 +++++++++----- .../core/config/DynamicThreadPoolConfig.java | 7 +++++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java index 90f36547..b9a5e58f 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java @@ -17,6 +17,7 @@ package cn.hippo4j.core.executor; +import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -25,8 +26,8 @@ import java.lang.annotation.Target; /** * Dynamic thread pool. */ -@Target(ElementType.METHOD) +@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) +@Documented public @interface DynamicThreadPool { - } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java index 4c482897..7e2065fc 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/SpringDynamicThreadPool.java @@ -17,20 +17,24 @@ package cn.hippo4j.core.executor; +import org.springframework.context.annotation.Bean; + +import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import org.springframework.context.annotation.Bean; - /** - *@author : wh - *@date : 2022/10/2 16:10 - *@description: + * A convenience annotation that is itself annotated with + * {@link Bean @Bean} and {@link DynamicThreadPool @DynamicThreadPool}. + * + * @since 1.4.2 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) +@Documented @Bean +@DynamicThreadPool public @interface SpringDynamicThreadPool { } 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 63d5331d..59bdb645 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 @@ -18,6 +18,7 @@ package cn.hippo4j.example.core.config; import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.SpringDynamicThreadPool; import cn.hippo4j.core.executor.support.ThreadPoolBuilder; import cn.hippo4j.example.core.handler.TaskTraceBuilderHandler; import cn.hippo4j.example.core.inittest.TaskDecoratorTest; @@ -59,8 +60,10 @@ public class DynamicThreadPoolConfig { return ttlExecutor; } - @Bean - @DynamicThreadPool + /** + * {@link Bean @Bean} and {@link DynamicThreadPool @DynamicThreadPool}. + */ + @SpringDynamicThreadPool public ThreadPoolExecutor messageProduceDynamicThreadPool() { return ThreadPoolBuilder.builderDynamicPoolById(MESSAGE_PRODUCE); } From 737d319c4c72a58f11ca618b969b716739fbb21a Mon Sep 17 00:00:00 2001 From: pizihao <48643103+pizihao@users.noreply.github.com> Date: Fri, 7 Oct 2022 15:14:25 +0800 Subject: [PATCH 25/30] fix : solve ReflectUtil#getMethodByName IllegalException (#763) (#764) Co-authored-by: pizihao --- .../hippo4j/common/toolkit/ReflectUtil.java | 23 +++++++++++++++++++ .../common/toolkit/ReflectUtilTest.java | 10 +++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java index 4683ab3c..35ae9095 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java @@ -143,6 +143,29 @@ public class ReflectUtil { } } + /** + * find the method associated with the method name
+ * if find multiple, return the first, parameter is equivocal + * + * @param clazz the class + * @param methodName retrieves the method name + * @return find method + */ + public static Method getMethodByName(Class clazz, String methodName) { + if (Objects.nonNull(clazz) && Objects.nonNull(methodName)) { + Method method = Arrays.stream(clazz.getMethods()) + .filter(m -> Objects.equals(m.getName(), methodName)) + .findFirst().orElse(null); + if (method != null) { + return method; + } + return Arrays.stream(clazz.getDeclaredMethods()) + .filter(m -> Objects.equals(m.getName(), methodName)) + .findFirst().orElse(null); + } + return null; + } + /** * find the method associated with the method name * diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java index 104155be..8a72c358 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ReflectUtilTest.java @@ -24,6 +24,7 @@ import org.junit.Assert; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.concurrent.ThreadPoolExecutor; public class ReflectUtilTest { @@ -123,8 +124,15 @@ public class ReflectUtilTest { @Test public void getMethodByNameTest() { - Method field = ReflectUtil.getMethodByName(TestClass.class, "setPrivateField", String.class); + // private method + Method runStateLessThan = ReflectUtil.getMethodByName(ThreadPoolExecutor.class, "runStateLessThan"); + Assert.assertNotNull(runStateLessThan); + // public method + Method field = ReflectUtil.getMethodByName(TestClass.class, "setPrivateField"); Assert.assertNotNull(field); + // parameters + Method privateField = ReflectUtil.getMethodByName(TestClass.class, "setPrivateField", String.class); + Assert.assertNotNull(privateField); } @Test From 481c54f6c1aa173fd1df1d23f634dbc947642ab2 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 15:57:18 +0800 Subject: [PATCH 26/30] Change document title link citation --- docs/docs/user_docs/other/question.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user_docs/other/question.md b/docs/docs/user_docs/other/question.md index 340bedc7..49fd4d77 100644 --- a/docs/docs/user_docs/other/question.md +++ b/docs/docs/user_docs/other/question.md @@ -44,7 +44,7 @@ sidebar_position: 3 > 更聪明问题:X.org 6.8.1 的鼠标指针,在某牌显卡 MV1005 芯片组环境下 - 会变形。 -### 使用清晰、正确、精准且合乎语法的语句 +### 使用清晰、正确、精准且合乎语法的语句 我们从经验中发现,粗心的提问者通常也会粗心地写程序与思考(我敢打包票)。回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。 From 3c5c09a799a56db8a73c847d8f5f38bbddf212c4 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 20:39:31 +0800 Subject: [PATCH 27/30] Change document --- .../dev_manual/blocking-queue-custom.md | 7 -- .../config/hippo4j-config-default.md | 45 +++++++++++ .../config/hippo4j-config-monitor.md | 2 +- .../config/hippo4j-config-more.md | 77 +++++++++++++++++++ .../config/hippo4j-config-start.md | 2 +- docs/docs/user_docs/ops/server-docker.md | 2 +- docs/docs/user_docs/other/group.md | 9 +-- 7 files changed, 127 insertions(+), 17 deletions(-) delete mode 100644 docs/docs/user_docs/dev_manual/blocking-queue-custom.md create mode 100644 docs/docs/user_docs/getting_started/config/hippo4j-config-default.md create mode 100644 docs/docs/user_docs/getting_started/config/hippo4j-config-more.md diff --git a/docs/docs/user_docs/dev_manual/blocking-queue-custom.md b/docs/docs/user_docs/dev_manual/blocking-queue-custom.md deleted file mode 100644 index 67c8df6b..00000000 --- a/docs/docs/user_docs/dev_manual/blocking-queue-custom.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 2 ---- - -# 阻塞队列自定义 - -同拒绝策略自定义。 \ No newline at end of file diff --git a/docs/docs/user_docs/getting_started/config/hippo4j-config-default.md b/docs/docs/user_docs/getting_started/config/hippo4j-config-default.md new file mode 100644 index 00000000..9c9e0fc9 --- /dev/null +++ b/docs/docs/user_docs/getting_started/config/hippo4j-config-default.md @@ -0,0 +1,45 @@ +--- +sidebar_position: 4 +--- + +# 参数默认配置 + +曾有多名小伙伴反馈说,项目中线程池一多,配置文件中配置就显得很臃肿。为此 hippo4j-config 开发出了动态线程池默认配置。 + +```yaml +spring: + dynamic: + thread-pool: + default-executor: + core-pool-size: 4 + maximum-pool-size: 6 + blocking-queue: ResizableCapacityLinkedBlockingQueue + queue-capacity: 1024 + execute-time-out: 1000 + keep-alive-time: 9999 + rejected-handler: AbortPolicy + active-alarm: 90 + capacity-alarm: 85 + alarm: true + allow-core-thread-time-out: true + notify: + interval: 5 + receives: chen.ma + executors: + - thread-pool-id: message-produce + - thread-pool-id: message-consume + core-pool-size: 80 + maximum-pool-size: 100 + execute-time-out: 1000 + notify: + interval: 6 + receives: chen.ma +``` + +`spring.dynamic.thread-pool.executors` 层级下,仅需要配置 `thread-pool-id`,其余配置从 `spring.dynamic.thread-pool.default-executor` 读取。 + +如果 `spring.dynamic.thread-pool.executors` 下配置和 `spring.dynamic.thread-pool.default-executor` 冲突,以前者为主。 + +通过该自定义配置方式,可减少大量重复线程池参数配置项,提高核心配置简洁度。 + +提示:`spring.dynamic.thread-pool.default-executor` 层级下参数,不提供动态刷新功能。 diff --git a/docs/docs/user_docs/getting_started/config/hippo4j-config-monitor.md b/docs/docs/user_docs/getting_started/config/hippo4j-config-monitor.md index c8a1fe32..72528638 100644 --- a/docs/docs/user_docs/getting_started/config/hippo4j-config-monitor.md +++ b/docs/docs/user_docs/getting_started/config/hippo4j-config-monitor.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 3 --- # 线程池监控 diff --git a/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md b/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md new file mode 100644 index 00000000..ca88840a --- /dev/null +++ b/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md @@ -0,0 +1,77 @@ +--- +sidebar_position: 3 +--- + +# 个性化配置 + +以下所述特性自 hippo4j-config v1.4.2 及以上版本提供,hippo4j 核心开发者 [@pizihao](https://github.com/pizihao) 完成对应功能开发。 + +## 需求背景 + +**1)容器及三方框架线程池自定义启用** + +最初设计容器线程池和三方框架线程池的动态变更是和启动无关的。也就是说,启动时不会根据配置文件中相关参数去修改两者对应的线程池配置。 + +这么设计的初衷是因为,不想让 hippo4j 过多的去介入框架原有的功能。因为容器和三方框架都支持线程池参数的自定义。 + +也就造成,可能你在配置中心配置了对应的容器和三方框架线程池参数,启动时是无效的。但当修改配置文件任一配置,容器和三方框架线程池配置将生效。 + +为了更好的用户体验,决定加入启用标识来控制:是否在项目初始化启动时,对容器和三方框架线程池参数进行修改。 + +**2)客户端集群个性化配置** + +大家都知道,hippo4j-config 是依赖配置中心做线程池配置动态变更。这种模式有一种缺点:改动配置文件后,所有客户端都会变更。 + +有些小伙伴希望 hippo4j-config 能够像 hippo4j-server 一样,能够针对单独的客户端进行配置变更。 + +## 容器及三方框架线程池自定义启用 + +容器及三方框架线程池启用配置,默认开启。动态线程池配置中也有该参数配置。 + +```yaml +spring: + dynamic: + thread-pool: + tomcat: + enable: true + adapter-executors: + - threadPoolKey: 'input' + enable: true +``` + +## 客户端集群个性化配置 + +分别在动态线程池、容器线程池以及三方框架线程池配置下增加 `nodes` 配置节点,通过该配置可匹配需要变更的节点。 + +```yaml +spring: + dynamic: + thread-pool: + tomcat: + nodes: 192.168.1.5:*,192.168.1.6:8080 + executors: + - thread-pool-id: message-consume + nodes: 192.168.1.5:* + adapter-executors: + - threadPoolKey: 'input' + nodes: 192.168.1.5:* +``` + +来一段代码方法中的注释,大家就基本明白如何使用了。 + +```java +/** + * Matching nodes
+ * nodes is ip + port.Get 'nodes' in the new Properties,Compare this with the ip + port of Application.
+ * support prefix pattern matching. e.g:
+ *
    + *
  • 192.168.1.5:* -- Matches all ports of 192.168.1.5
  • + *
  • 192.168.1.*:2009 -- Matches 2009 port of 192.168.1.*
  • + *
  • * -- all
  • + *
  • empty -- all
  • + *
+ * The format of ip + port is ip : port. + */ +``` + +`nodes` 可与 `enable` 同时使用。如此,基于配置中心的动态线程池实现方式,将能够更方便的支持个性化需求。 diff --git a/docs/docs/user_docs/getting_started/config/hippo4j-config-start.md b/docs/docs/user_docs/getting_started/config/hippo4j-config-start.md index baefd21c..b3dcb3d9 100644 --- a/docs/docs/user_docs/getting_started/config/hippo4j-config-start.md +++ b/docs/docs/user_docs/getting_started/config/hippo4j-config-start.md @@ -16,7 +16,7 @@ Nacos、Apollo、Zookeeper、ETCD 配置中心任选其一。
``` -启动类上添加注解 @EnableDynamicThreadPool。 +启动类上添加注解 `@EnableDynamicThreadPool`。 ```java @SpringBootApplication diff --git a/docs/docs/user_docs/ops/server-docker.md b/docs/docs/user_docs/ops/server-docker.md index a6da6349..8b44a5f7 100644 --- a/docs/docs/user_docs/ops/server-docker.md +++ b/docs/docs/user_docs/ops/server-docker.md @@ -2,7 +2,7 @@ sidebar_position: 2 --- -# Docker 部署 +# Docker部署 ## 镜像启动 diff --git a/docs/docs/user_docs/other/group.md b/docs/docs/user_docs/other/group.md index 702d98b1..e75e96be 100644 --- a/docs/docs/user_docs/other/group.md +++ b/docs/docs/user_docs/other/group.md @@ -4,11 +4,6 @@ sidebar_position: 1 # 加群沟通 +扫码添加微信,备注:`hippo4j`,邀您加入群聊。 -对于这个项目,是否有什么不一样看法,欢迎在 Issue 一起沟通交流;或者添加小编微信进交流群。 - -![](https://images-machen.oss-cn-beijing.aliyuncs.com/64E583A0-B1DD-49A3-9AEC-8D246E9D5C12.PNG?x-oss-process=image/resize,h_500,w_800) - - - - +![](https://images-machen.oss-cn-beijing.aliyuncs.com/185774220-c11951f9-e130-4d60-8204-afb5c51d4401.png) From f9d8b5f9930df72342e36140773fae5ef395bea8 Mon Sep 17 00:00:00 2001 From: weihubeats Date: Fri, 7 Oct 2022 20:41:24 +0800 Subject: [PATCH 28/30] Rename (#765) * Simplified DynamicThreadPool usage * Simplified DynamicThreadPool usage * init * update method name --- .../web/UndertowWebThreadPoolHandler.java | 20 +++++++++---------- .../executor/support/ThreadPoolBuilder.java | 2 +- .../config/etcd/config/ThreadPoolConfig.java | 2 +- .../core/config/DynamicThreadPoolConfig.java | 2 +- .../message/service/AlarmControlHandler.java | 12 +++++------ .../refresher/ZookeeperRefresherHandler.java | 8 ++++---- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java index 731b094a..c6b23fd2 100644 --- a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java @@ -17,6 +17,13 @@ package cn.hippo4j.adapter.web; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Objects; +import java.util.concurrent.Executor; + import cn.hippo4j.common.constant.ChangeThreadPoolConstants; import cn.hippo4j.common.model.ThreadPoolBaseInfo; import cn.hippo4j.common.model.ThreadPoolParameter; @@ -26,19 +33,12 @@ import cn.hippo4j.common.toolkit.CalculateUtil; import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; import io.undertow.Undertow; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.web.embedded.undertow.UndertowServletWebServer; -import org.springframework.boot.web.server.WebServer; -import org.springframework.util.ReflectionUtils; import org.xnio.Options; import org.xnio.XnioWorker; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Date; -import java.util.Objects; -import java.util.concurrent.Executor; +import org.springframework.boot.web.embedded.undertow.UndertowServletWebServer; +import org.springframework.boot.web.server.WebServer; +import org.springframework.util.ReflectionUtils; /** * Undertow web thread pool handler. diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java index 91ff100a..e54d8e73 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java @@ -231,7 +231,7 @@ public class ThreadPoolBuilder implements Builder { * @param threadPoolId threadPoolId * @return ThreadPoolExecutor */ - public static ThreadPoolExecutor builderDynamicPoolById(String threadPoolId) { + public static ThreadPoolExecutor buildDynamicPoolById(String threadPoolId) { return ThreadPoolBuilder.builder() .threadFactory(threadPoolId) .threadPoolId(threadPoolId) diff --git a/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java b/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java index db3f1ad2..f1523946 100644 --- a/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java +++ b/hippo4j-example/hippo4j-config-etcd-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/etcd/config/ThreadPoolConfig.java @@ -35,6 +35,6 @@ public class ThreadPoolConfig { @SpringDynamicThreadPool public ThreadPoolExecutor messageConsumeDynamicExecutor() { String threadPoolId = "message-consume"; - return ThreadPoolBuilder.builderDynamicPoolById(threadPoolId); + return ThreadPoolBuilder.buildDynamicPoolById(threadPoolId); } } 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 59bdb645..517a190b 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 @@ -65,7 +65,7 @@ public class DynamicThreadPoolConfig { */ @SpringDynamicThreadPool public ThreadPoolExecutor messageProduceDynamicThreadPool() { - return ThreadPoolBuilder.builderDynamicPoolById(MESSAGE_PRODUCE); + return ThreadPoolBuilder.buildDynamicPoolById(MESSAGE_PRODUCE); } /** diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java index c85b51ec..96eae6ab 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java @@ -17,6 +17,12 @@ package cn.hippo4j.message.service; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.toolkit.IdUtil; import cn.hippo4j.common.toolkit.StringUtil; @@ -24,12 +30,6 @@ import cn.hippo4j.message.dto.AlarmControlDTO; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.ReentrantLock; - /** * Alarm control assembly. */ diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java index c62da963..0f01b047 100644 --- a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java @@ -17,6 +17,10 @@ package cn.hippo4j.config.springboot.starter.refresher; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; + import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; import lombok.extern.slf4j.Slf4j; @@ -31,10 +35,6 @@ import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.curator.utils.ZKPaths; import org.apache.zookeeper.WatchedEvent; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Map; - /** * Zookeeper refresher handler. */ From a99c2db75c1dd0f4b1124b753522aecab8e179a0 Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 21:32:17 +0800 Subject: [PATCH 29/30] Change document --- .../user_docs/getting_started/config/hippo4j-config-more.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md b/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md index ca88840a..f0671b89 100644 --- a/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md +++ b/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md @@ -26,7 +26,7 @@ sidebar_position: 3 ## 容器及三方框架线程池自定义启用 -容器及三方框架线程池启用配置,默认开启。动态线程池配置中也有该参数配置。 +容器及三方框架线程池添加启用配置,为了保持统一,动态线程池配置中也有该参数配置。配置项默认开启。 ```yaml spring: @@ -34,6 +34,9 @@ spring: thread-pool: tomcat: enable: true + executors: + - thread-pool-id: message-consume + enable: false adapter-executors: - threadPoolKey: 'input' enable: true From 5c79c8f72c7bb984cc4b8daa9133759ef63459eb Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Fri, 7 Oct 2022 21:33:25 +0800 Subject: [PATCH 30/30] Change document --- .../user_docs/getting_started/config/hippo4j-config-more.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md b/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md index f0671b89..2511b4f3 100644 --- a/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md +++ b/docs/docs/user_docs/getting_started/config/hippo4j-config-more.md @@ -4,7 +4,7 @@ sidebar_position: 3 # 个性化配置 -以下所述特性自 hippo4j-config v1.4.2 及以上版本提供,hippo4j 核心开发者 [@pizihao](https://github.com/pizihao) 完成对应功能开发。 +以下所述特性自 hippo4j-config v1.4.2 及以上版本提供,由 hippo4j 核心开发者 [@pizihao](https://github.com/pizihao) 完成相应功能开发。 ## 需求背景