diff --git a/README.md b/README.md
index 92ed22b4..0df41a19 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 等消费线程池运行时数据查看和线程数变更。
## 快速开始
@@ -115,15 +115,15 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
-
-
+
+
Null
|
-
-
+
+
Null
@@ -151,17 +151,17 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池
|
-
-
+
+
- Null
+ Lijx
|
-
-
+
+
- Lijx
+ Null
|
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/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.
*/
-->
+
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 芯片组环境下 - 会变形。
-### 使用清晰、正确、精准且合乎语法的语句
+### 使用清晰、正确、精准且合乎语法的语句
我们从经验中发现,粗心的提问者通常也会粗心地写程序与思考(我敢打包票)。回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。
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..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 com.google.common.util.concurrent.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()
- .setNameFormat("threadPoolAdapter")
- .setDaemon(true)
+ .prefix("threadPoolAdapter")
+ .daemon(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-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 5f46ffe9..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);
@@ -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-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 7b6c6fec..320c0fba 100644
--- a/hippo4j-common/pom.xml
+++ b/hippo4j-common/pom.xml
@@ -62,19 +62,19 @@
- com.google.guava
- guava
+ org.springframework.boot
+ spring-boot-starter-test
+ test
- cn.hutool
- hutool-all
+ com.github.ben-manes.caffeine
+ caffeine
- org.springframework.boot
- spring-boot-starter-test
- test
+ com.github.dozermapper
+ dozer-core
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-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/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..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
@@ -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}
@@ -229,8 +233,9 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue
*/
public ResizableCapacityLinkedBlockingQueue(Collection extends E> c) {
this(Integer.MAX_VALUE);
- for (Iterator extends E> it = c.iterator(); it.hasNext();)
+ for (Iterator extends E> it = c.iterator(); it.hasNext();) {
add(it.next());
+ }
}
// this doc comment is overridden to remove the reference to collections
@@ -698,6 +703,9 @@ public class ResizableCapacityLinkedBlockingQueue extends AbstractQueue
return new Itr();
}
+ /**
+ * Itr.
+ */
private class Itr implements Iterator {
/*
@@ -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..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
@@ -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/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/ByteConvertUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java
index 102ba478..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
@@ -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..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
@@ -17,10 +17,8 @@
package cn.hippo4j.common.toolkit;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* Collection util.
@@ -35,11 +33,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 +89,7 @@ public class CollectionUtil {
* @return
*/
public static boolean isEmpty(Iterator> iterator) {
- return null == iterator || false == iterator.hasNext();
+ return null == iterator || !iterator.hasNext();
}
/**
@@ -122,4 +121,57 @@ public class CollectionUtil {
public static boolean isNotEmpty(Collection> collection) {
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
+ *
+ * @param elements
+ * @return
+ */
+ @SafeVarargs
+ public static ArrayList newArrayList(E... elements) {
+ Objects.requireNonNull(elements);
+ // 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/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 8868d0c7..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,18 +17,23 @@
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;
*/
public class FileUtil {
+ private static final int ERROR_CODE = -1;
+
@SneakyThrows
public static String readUtf8String(String path) {
String resultReadStr;
@@ -38,7 +43,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();
}
@@ -46,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/Joiner.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java
new file mode 100644
index 00000000..05eefe1f
--- /dev/null
+++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Joiner.java
@@ -0,0 +1,88 @@
+/*
+ * 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/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/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 |