From bbb10ee4c96e880f96b0a6e63794a2fa76d9870e Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Sun, 28 Nov 2021 22:59:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=97=B6=E6=A3=80=E6=9F=A5=E5=8F=82=E6=95=B0=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starter/config/BootstrapProperties.java | 13 ---- .../starter/config/DiscoveryConfig.java | 12 ++-- .../starter/config/MessageAlarmConfig.java | 14 +++-- .../starter/core/ConfigEmptyAnalyzer.java | 19 ++++++ .../starter/core/ConfigEmptyException.java | 20 ++++++ .../enable/BeforeCheckConfiguration.java | 62 +++++++++++++++++++ .../enable/EnableDynamicThreadPool.java | 2 +- .../starter/remote/ServerListManager.java | 3 - .../main/resources/META-INF/spring.factories | 4 +- 9 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java create mode 100644 hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java create mode 100644 hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java index cbac35d5..280f7d00 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java @@ -1,13 +1,10 @@ package cn.hippo4j.starter.config; -import cn.hippo4j.starter.alarm.NotifyConfig; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.properties.ConfigurationProperties; -import java.util.List; - /** * Bootstrap properties. * @@ -42,14 +39,4 @@ public class BootstrapProperties { */ private boolean banner = true; - /** - * Alarm interval - */ - private Long alarmInterval; - - /** - * notifys - */ - private List notifys; - } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java index 43c8223f..8bc92a08 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java @@ -1,11 +1,11 @@ package cn.hippo4j.starter.config; -import cn.hutool.core.util.StrUtil; import cn.hippo4j.common.model.InstanceInfo; import cn.hippo4j.common.toolkit.ContentUtil; import cn.hippo4j.starter.core.DiscoveryClient; import cn.hippo4j.starter.remote.HttpAgent; import cn.hippo4j.starter.toolkit.inet.InetUtils; +import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import org.springframework.context.annotation.Bean; @@ -34,14 +34,18 @@ public class DiscoveryConfig { @Bean @SneakyThrows public InstanceInfo instanceConfig() { + String namespace = properties.getNamespace(); + String itemId = properties.getItemId(); + String applicationName = environment.getProperty("spring.application.name"); + InstanceInfo instanceInfo = new InstanceInfo(); instanceInfo.setInstanceId(getDefaultInstanceId(environment, inetUtils)) .setIpApplicationName(getIpApplicationName(environment, inetUtils)) .setHostName(InetAddress.getLocalHost().getHostAddress()) - .setGroupKey(properties.getItemId() + "+" + properties.getNamespace()) - .setAppName(environment.getProperty("spring.application.name")) + .setGroupKey(itemId + "+" + namespace) + .setAppName(applicationName) .setClientBasePath(environment.getProperty("server.servlet.context-path")) - .setGroupKey(ContentUtil.getGroupKey(properties.getItemId(), properties.getNamespace())); + .setGroupKey(ContentUtil.getGroupKey(itemId, namespace)); String callBackUrl = new StringBuilder().append(instanceInfo.getHostName()).append(":") .append(environment.getProperty("server.port")).append(instanceInfo.getClientBasePath()) diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java index a8e60e22..afd4828b 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java @@ -1,13 +1,15 @@ package cn.hippo4j.starter.config; import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.starter.alarm.*; +import cn.hippo4j.starter.alarm.AlarmControlHandler; +import cn.hippo4j.starter.alarm.BaseSendMessageService; +import cn.hippo4j.starter.alarm.SendMessageHandler; +import cn.hippo4j.starter.alarm.SendMessageService; import cn.hippo4j.starter.alarm.ding.DingSendMessageHandler; import cn.hippo4j.starter.alarm.lark.LarkSendMessageHandler; import cn.hippo4j.starter.alarm.wechat.WeChatSendMessageHandler; import cn.hippo4j.starter.remote.HttpAgent; import lombok.AllArgsConstructor; -import org.apache.logging.log4j.util.Strings; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.DependsOn; import org.springframework.core.env.ConfigurableEnvironment; @@ -27,6 +29,8 @@ public class MessageAlarmConfig { private ConfigurableEnvironment environment; + public static final String ACTIVE_DEFAULT = "unknown"; + public static final String SEND_MESSAGE_BEAN_NAME = "hippo4JSendMessageService"; @DependsOn("hippo4JApplicationContextHolder") @@ -37,19 +41,19 @@ public class MessageAlarmConfig { @Bean public SendMessageHandler dingSendMessageHandler() { - String active = environment.getProperty("spring.profiles.active", Strings.EMPTY); + String active = environment.getProperty("spring.profiles.active", ACTIVE_DEFAULT); return new DingSendMessageHandler(active, instanceInfo); } @Bean public SendMessageHandler larkSendMessageHandler() { - String active = environment.getProperty("spring.profiles.active", Strings.EMPTY); + String active = environment.getProperty("spring.profiles.active", ACTIVE_DEFAULT); return new LarkSendMessageHandler(active, instanceInfo); } @Bean public SendMessageHandler weChatSendMessageHandler() { - String active = environment.getProperty("spring.profiles.active", Strings.EMPTY); + String active = environment.getProperty("spring.profiles.active", ACTIVE_DEFAULT); return new WeChatSendMessageHandler(active, instanceInfo); } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java new file mode 100644 index 00000000..9349b267 --- /dev/null +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java @@ -0,0 +1,19 @@ +package cn.hippo4j.starter.core; + +import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; +import org.springframework.boot.diagnostics.FailureAnalysis; + +/** + * Config empty analyzer. + * + * @author chen.ma + * @date 2021/11/28 21:59 + */ +public class ConfigEmptyAnalyzer extends AbstractFailureAnalyzer { + + @Override + protected FailureAnalysis analyze(Throwable rootFailure, ConfigEmptyException cause) { + return new FailureAnalysis(cause.getDescription(), cause.getAction(), cause); + } + +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java new file mode 100644 index 00000000..21110a10 --- /dev/null +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java @@ -0,0 +1,20 @@ +package cn.hippo4j.starter.core; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * Config empty exception. + * + * @author chen.ma + * @date 2021/11/28 21:58 + */ +@Data +@AllArgsConstructor +public class ConfigEmptyException extends RuntimeException { + + private String description; + + private String action; + +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java new file mode 100644 index 00000000..a2bd08ea --- /dev/null +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java @@ -0,0 +1,62 @@ +package cn.hippo4j.starter.enable; + +import cn.hippo4j.starter.config.BootstrapProperties; +import cn.hippo4j.starter.core.ConfigEmptyException; +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * Before check configuration. + * + * @author chen.ma + * @date 2021/11/28 22:44 + */ +@AllArgsConstructor +@Configuration(proxyBeanMethods = false) +public class BeforeCheckConfiguration { + + @Bean + public BeforeCheckConfiguration.BeforeCheck dynamicThreadPoolBeforeCheckBean(BootstrapProperties properties, ConfigurableEnvironment environment) { + String namespace = properties.getNamespace(); + if (StrUtil.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 (StrUtil.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 (StrUtil.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 (StrUtil.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." + ); + } + + return new BeforeCheckConfiguration.BeforeCheck(); + } + + public class BeforeCheck { + + } + +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java index 583efe5b..739ac226 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java @@ -13,7 +13,7 @@ import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented -@Import(MarkerConfiguration.class) +@Import({BeforeCheckConfiguration.class, MarkerConfiguration.class}) public @interface EnableDynamicThreadPool { } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java index 681c1eb1..e0f7e8c8 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java @@ -58,9 +58,6 @@ public class ServerListManager { } Iterator iterator() { - if (serverUrls.isEmpty()) { - log.error("[iterator-serverlist] No server address defined!"); - } return new ServerAddressIterator(serverUrls); } diff --git a/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories index 641c9c28..dcfef765 100644 --- a/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.hippo4j.starter.config.DynamicThreadPoolAutoConfiguration +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.starter.config.DynamicThreadPoolAutoConfiguration +org.springframework.boot.diagnostics.FailureAnalyzer=cn.hippo4j.starter.core.ConfigEmptyAnalyzer