From d43978db2f8afa7582d55b0cce278fde61f3c8bf Mon Sep 17 00:00:00 2001
From: ayi <2084276225@qq.com>
Date: Wed, 30 Aug 2023 23:49:22 +0800
Subject: [PATCH] feature: hippo4j config model in nacos config before check
---
threadpool/core/pom.xml | 5 ++
.../core/enable/BeforeCheckConfiguration.java | 58 +++++++++++++++++++
2 files changed, 63 insertions(+)
diff --git a/threadpool/core/pom.xml b/threadpool/core/pom.xml
index 903c73de..faf0f64c 100644
--- a/threadpool/core/pom.xml
+++ b/threadpool/core/pom.xml
@@ -44,5 +44,10 @@
mockito-inline
test
+
+ cn.hippo4j
+ hippo4j-threadpool-dynamic-mode-config
+ ${project.version}
+
diff --git a/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java b/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java
index c6640d93..061e1b48 100644
--- a/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java
+++ b/threadpool/core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java
@@ -17,16 +17,20 @@
package cn.hippo4j.core.enable;
+import cn.hippo4j.common.toolkit.MapUtil;
import cn.hippo4j.common.toolkit.StringUtil;
import cn.hippo4j.core.config.ConfigEmptyException;
import cn.hippo4j.threadpool.dynamic.api.BootstrapPropertiesInterface;
+import cn.hippo4j.threadpool.dynamic.mode.config.properties.BootstrapConfigProperties;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
+import java.util.Map;
import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* Before check configuration.
@@ -36,6 +40,7 @@ import java.util.Objects;
public class BeforeCheckConfiguration {
private final String bootstrapPropertiesClassName = "cn.hippo4j.springboot.starter.config.BootstrapProperties";
+ private final String bootstrapConfigPropertiesClassName = "cn.hippo4j.threadpool.dynamic.mode.config.properties.BootstrapConfigProperties";
@Bean
public BeforeCheckConfiguration.BeforeCheck dynamicThreadPoolBeforeCheckBean(@Autowired(required = false) BootstrapPropertiesInterface properties,
@@ -71,6 +76,59 @@ public class BeforeCheckConfiguration {
return new BeforeCheckConfiguration.BeforeCheck();
}
+ @Bean
+ public BeforeCheckConfiguration.BeforeCheck dynamicThreadPoolConfigBeforeCheckBean(@Autowired(required = false) BootstrapConfigProperties properties,
+ ConfigurableEnvironment environment) {
+ boolean checkFlag = properties != null && Objects.equals(bootstrapConfigPropertiesClassName, properties.getClass().getName()) && properties.getEnable();
+ if (checkFlag) {
+ String namespace = properties.getNamespace();
+ if (StringUtil.isBlank(namespace)) {
+ throw new ConfigEmptyException(
+ "Web server failed to start. The dynamic thread pool namespace is empty.",
+ "Please check whether the [spring.dynamic.thread-pool.namespace] configuration is empty or an empty string.");
+ }
+ String itemId = properties.getItemId();
+ if (StringUtil.isBlank(itemId)) {
+ throw new ConfigEmptyException(
+ "Web server failed to start. The dynamic thread pool item id is empty.",
+ "Please check whether the [spring.dynamic.thread-pool.item-id] configuration is empty or an empty string.");
+ }
+ String serverAddr = properties.getServerAddr();
+ if (StringUtil.isBlank(serverAddr)) {
+ throw new ConfigEmptyException(
+ "Web server failed to start. The dynamic thread pool server addr is empty.",
+ "Please check whether the [spring.dynamic.thread-pool.server-addr] configuration is empty or an empty string.");
+ }
+ String applicationName = environment.getProperty("spring.application.name");
+ if (StringUtil.isBlank(applicationName)) {
+ throw new ConfigEmptyException(
+ "Web server failed to start. The dynamic thread pool application name is empty.",
+ "Please check whether the [spring.application.name] configuration is empty or an empty string.");
+ }
+ AtomicBoolean flag = new AtomicBoolean(false);
+ Map nacosConfigMap = properties.getNacos();
+ if (MapUtil.isNotEmpty(nacosConfigMap)) {
+ flag.set(true);
+ String dataId = nacosConfigMap.get("data-id");
+ if (StringUtil.isBlank(dataId)) {
+ throw new ConfigEmptyException(
+ "Web server failed to start. The dynamic thread pool config nacos data-id is empty.",
+ "Please check whether the [spring.dynamic.thread-pool.nacos.data-id] configuration is empty or an empty string.");
+ }
+ String group = nacosConfigMap.get("group");
+ if (StringUtil.isBlank(group)) {
+ throw new ConfigEmptyException(
+ "Web server failed to start. The dynamic thread pool config nacos group is empty.",
+ "Please check whether the [spring.dynamic.thread-pool.nacos.group] configuration is empty or an empty string.");
+ }
+ }
+ if (!flag.get()) {
+ // TODO throw ConfigEmptyException description field fill
+ }
+ }
+ return new BeforeCheckConfiguration.BeforeCheck();
+ }
+
/**
* Before check.
*/
--
Gitee