From 2948419b19a7ee895c2c796e4228780bdcf13889 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E5=89=91=E9=91=AB?= <1064730540@qq.com>
Date: Wed, 12 Oct 2022 20:14:58 +0800
Subject: [PATCH] feat: support spring boot 1.5.x
---
.../adapter/web/WebIpAndPortHolder.java | 14 +-
hippo4j-common/pom.xml | 5 +-
.../pom.xml | 1 +
...igNacosSpringBoot15ExampleApplication.java | 31 ++++
.../src/main/resources/bootstrap.properties | 1 +
hippo4j-example/pom.xml | 1 +
.../pom.xml | 1 +
.../config/ConfigHandlerConfiguration.java | 36 +++++
...5BootstrapConfigPropertiesBinderAdapt.java | 109 ++++++++++++++
.../CustomPropertyNamePatternsMatcher.java | 41 ++++++
.../main/resources/META-INF/spring.factories | 1 +
.../config/ConfigHandlerConfiguration.java | 14 +-
.../DynamicThreadPoolAutoConfiguration.java | 6 +-
...bstractConfigThreadPoolDynamicRefresh.java | 8 +-
.../BootstrapConfigPropertiesBinderAdapt.java | 135 +-----------------
...tBootstrapConfigPropertiesBinderAdapt.java | 47 ++++++
.../refresher/NacosRefresherHandler.java | 8 +-
hippo4j-spring-boot/pom.xml | 1 +
18 files changed, 307 insertions(+), 153 deletions(-)
create mode 100644 hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/pom.xml
create mode 100644 hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosSpringBoot15ExampleApplication.java
create mode 100644 hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/resources/bootstrap.properties
create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/pom.xml
create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/config/ConfigHandlerConfiguration.java
create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/refresher/SpringBoot15BootstrapConfigPropertiesBinderAdapt.java
create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/org/springframework/boot/bind/CustomPropertyNamePatternsMatcher.java
create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/resources/META-INF/spring.factories
create mode 100644 hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/DefaultBootstrapConfigPropertiesBinderAdapt.java
diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java
index c35f90af..aad45db9 100644
--- a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java
+++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java
@@ -33,6 +33,15 @@ import java.util.concurrent.atomic.AtomicReference;
*/
public class WebIpAndPortHolder {
+ private static boolean support = false;
+ static {
+ try {
+ Class.forName("org.springframework.boot.web.server.WebServer");
+ support = true;
+ } catch (Exception e) {
+
+ }
+ }
/**
* Application ip and application post
*/
@@ -47,6 +56,9 @@ public class WebIpAndPortHolder {
}
protected static void initIpAndPort() {
+ if (!support) {
+ return;
+ }
webIpAndPort.compareAndSet(null, getWebIpAndPortInfo());
}
@@ -83,7 +95,7 @@ public class WebIpAndPortHolder {
*/
public static boolean check(String nodes) {
WebIpAndPortInfo webIpAndPort = WebIpAndPortHolder.getWebIpAndPort();
- if (StringUtil.isEmpty(nodes) || ALL.equals(nodes)) {
+ if (StringUtil.isEmpty(nodes) || ALL.equals(nodes) || webIpAndPort == null) {
return true;
}
String[] splitNodes = nodes.split(SEPARATOR);
diff --git a/hippo4j-common/pom.xml b/hippo4j-common/pom.xml
index 5e40c3f4..deaebf44 100644
--- a/hippo4j-common/pom.xml
+++ b/hippo4j-common/pom.xml
@@ -49,10 +49,7 @@
org.projectlomboklombok
-
- org.springframework.boot
- spring-boot-starter-json
-
+
org.springframework.bootspring-boot-starter-test
diff --git a/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/pom.xml b/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/pom.xml
new file mode 100644
index 00000000..54b14221
--- /dev/null
+++ b/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/pom.xml
@@ -0,0 +1 @@
+
4.0.0cn.hippo4jhippo4j-example${revision}hippo4j-config-nacos-spring-boot-1.5-starter-exampletrue1.5.22.RELEASE1.1.4com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config1.5.1.RELEASEorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestcn.hippo4jhippo4j-example-core${revision}cn.hippo4jhippo4j-config-spring-boot-1.5-starter${revision}io.micrometermicrometer-registry-prometheus1.1.3io.micrometermicrometer-spring-legacy1.1.3org.springframework.bootspring-boot-starter-actuator
\ No newline at end of file
diff --git a/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosSpringBoot15ExampleApplication.java b/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosSpringBoot15ExampleApplication.java
new file mode 100644
index 00000000..6db043c1
--- /dev/null
+++ b/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosSpringBoot15ExampleApplication.java
@@ -0,0 +1,31 @@
+/*
+ * 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.example.config.nacos;
+
+import cn.hippo4j.core.enable.EnableDynamicThreadPool;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@EnableDynamicThreadPool
+@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.core")
+public class ConfigNacosSpringBoot15ExampleApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ConfigNacosSpringBoot15ExampleApplication.class, args);
+ }
+}
diff --git a/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/resources/bootstrap.properties b/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/resources/bootstrap.properties
new file mode 100644
index 00000000..62d1b702
--- /dev/null
+++ b/hippo4j-example/hippo4j-config-nacos-spring-boot-1.5-starter-example/src/main/resources/bootstrap.properties
@@ -0,0 +1 @@
+debug=true
server.port=8089
server.servlet.context-path=/example
management.metrics.export.prometheus.enabled=true
management.server.port=29999
management.endpoints.web.exposure.include=*
spring.profiles.active=dev
spring.application.name=dynamic-threadpool-example
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.extension-configs[0].data-id=hippo4j-nacos.yaml
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.dynamic.thread-pool.enable=true
spring.dynamic.thread-pool.banner=true
spring.dynamic.thread-pool.collect=true
spring.dynamic.thread-pool.collect-type=micrometer
spring.dynamic.thread-pool.check-state-interval=5
spring.dynamic.thread-pool.notify-platforms[0].platform=WECHAT
spring.dynamic.thread-pool.notify-platforms[0].secret-key=ac0426a5-c712-474c-9bff-72b8b8f5caff
spring.dynamic.thread-pool.notify-platforms[1].platform=DING
spring.dynamic.thread-pool.notify-platforms[1].secret-key=56417ebba6a27ca352f0de77a2ae9da66d01f39610b5ee8a6033c60ef9071c55
spring.dynamic.thread-pool.notify-platforms[2].platform=LARK
spring.dynamic.thread-pool.notify-platforms[2].secret-key=2cbf2808-3839-4c26-a04d-fd201dd51f9e
spring.dynamic.thread-pool.nacos.data-id=hippo4j-nacos.yaml
spring.dynamic.thread-pool.nacos.group=DEFAULT_GROUP
spring.dynamic.thread-pool.config-file-type=yml
\ No newline at end of file
diff --git a/hippo4j-example/pom.xml b/hippo4j-example/pom.xml
index 93dab68b..ee233eb9 100644
--- a/hippo4j-example/pom.xml
+++ b/hippo4j-example/pom.xml
@@ -23,6 +23,7 @@
hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-examplehippo4j-spring-boot-starter-adapter-rocketmq-examplehippo4j-config-etcd-spring-boot-starter-example
+ hippo4j-config-nacos-spring-boot-1.5-starter-example
diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/pom.xml b/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/pom.xml
new file mode 100644
index 00000000..7ad3b051
--- /dev/null
+++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/pom.xml
@@ -0,0 +1 @@
+
cn.hippo4jhippo4j-spring-boot${revision}4.0.0hippo4j-config-spring-boot-1.5-starter881.5.22.RELEASEcn.hippo4jhippo4j-config-spring-boot-starter${revision}
\ No newline at end of file
diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/config/ConfigHandlerConfiguration.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/config/ConfigHandlerConfiguration.java
new file mode 100644
index 00000000..d8164f0f
--- /dev/null
+++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/config/ConfigHandlerConfiguration.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package cn.hippo4j.config.springboot15x.starter.config;
+
+import cn.hippo4j.config.springboot.starter.refresher.BootstrapConfigPropertiesBinderAdapt;
+import cn.hippo4j.config.springboot15x.starter.refresher.SpringBoot15BootstrapConfigPropertiesBinderAdapt;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.bind.RelaxedDataBinder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class ConfigHandlerConfiguration {
+
+ @Bean
+ @ConditionalOnClass(RelaxedDataBinder.class)
+ public BootstrapConfigPropertiesBinderAdapt bootstrapConfigPropertiesBinderAdapt() {
+ return new SpringBoot15BootstrapConfigPropertiesBinderAdapt();
+ }
+
+}
diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/refresher/SpringBoot15BootstrapConfigPropertiesBinderAdapt.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/refresher/SpringBoot15BootstrapConfigPropertiesBinderAdapt.java
new file mode 100644
index 00000000..41e771c7
--- /dev/null
+++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-1.5-starter/src/main/java/cn/hippo4j/config/springboot15x/starter/refresher/SpringBoot15BootstrapConfigPropertiesBinderAdapt.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package cn.hippo4j.config.springboot15x.starter.refresher;
+
+import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties;
+import cn.hippo4j.config.springboot.starter.refresher.BootstrapConfigPropertiesBinderAdapt;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.PropertyValues;
+import org.springframework.beans.support.ResourceEditorRegistrar;
+import org.springframework.boot.bind.CustomPropertyNamePatternsMatcher;
+import org.springframework.boot.bind.RelaxedDataBinder;
+import org.springframework.boot.bind.RelaxedNames;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.MutablePropertySources;
+
+import java.beans.PropertyDescriptor;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Bootstrap core properties binder adapt.
+ */
+public class SpringBoot15BootstrapConfigPropertiesBinderAdapt implements ApplicationContextAware, BootstrapConfigPropertiesBinderAdapt {
+
+ private ApplicationContext applicationContext;
+
+ /**
+ * Bootstrap core properties binder.
+ *
+ * @param configInfo
+ * @param bootstrapConfigProperties
+ * @return
+ */
+ @Override
+ public BootstrapConfigProperties bootstrapCorePropertiesBinder(Map