From 4a0a7061ff2470ab5c75e209754e61465461d074 Mon Sep 17 00:00:00 2001
From: liaozan <378024053@qq.com>
Date: Thu, 26 Oct 2023 15:32:08 +0800
Subject: [PATCH] Add spring-boot-admin
---
...stInfoHolder.java => IpAddressHolder.java} | 40 +++----------------
pom.xml | 11 +++++
.../logger/JSONLoggingInitializer.java | 5 +--
.../LoggingConfigLoadedEventListener.java | 14 ++-----
.../xxl/properties/XxlJobProperties.java | 4 +-
support/schbrain-spring-support/pom.xml | 12 +++++-
.../spring/admin/AdminApplicationFactory.java | 38 ++++++++++++++++++
...ringBootAdminFeatureAutoConfiguration.java | 35 ++++++++++++++++
...ultPropertiesEnvironmentPostProcessor.java | 13 ++++--
...ot.autoconfigure.AutoConfiguration.imports | 1 +
10 files changed, 117 insertions(+), 56 deletions(-)
rename commons/common-util/src/main/java/com/schbrain/common/util/{HostInfoHolder.java => IpAddressHolder.java} (61%)
create mode 100644 support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/AdminApplicationFactory.java
create mode 100644 support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/SpringBootAdminFeatureAutoConfiguration.java
diff --git a/commons/common-util/src/main/java/com/schbrain/common/util/HostInfoHolder.java b/commons/common-util/src/main/java/com/schbrain/common/util/IpAddressHolder.java
similarity index 61%
rename from commons/common-util/src/main/java/com/schbrain/common/util/HostInfoHolder.java
rename to commons/common-util/src/main/java/com/schbrain/common/util/IpAddressHolder.java
index 4b97e59..c989e67 100644
--- a/commons/common-util/src/main/java/com/schbrain/common/util/HostInfoHolder.java
+++ b/commons/common-util/src/main/java/com/schbrain/common/util/IpAddressHolder.java
@@ -1,35 +1,24 @@
package com.schbrain.common.util;
-import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.net.*;
import java.util.Enumeration;
+import java.util.Optional;
/**
* @author liaozan
* @since 2021/11/19
*/
@Slf4j
-public class HostInfoHolder {
+public class IpAddressHolder {
- private static final HostInfo HOST_INFO = findFirstNonLoopBackHostInfo();
+ private static final String POD_IP = System.getenv("POD_IP");
+ private static final String LOCAL_IP = Optional.ofNullable(findFirstNonLoopBackAddress()).map(InetAddress::getHostAddress).orElse("127.0.0.1");
- public static HostInfo getHostInfo() {
- return HOST_INFO;
- }
-
- private static HostInfo findFirstNonLoopBackHostInfo() {
- InetAddress address = findFirstNonLoopBackAddress();
- if (address != null) {
- return convertAddress(address);
- }
- log.warn("Cannot find first non-loopBack address, fallback to localhost");
- HostInfo hostInfo = new HostInfo();
- hostInfo.setHostname("localhost");
- hostInfo.setIpAddress("127.0.0.1");
- return hostInfo;
+ public static String getIpAddress() {
+ return POD_IP == null ? LOCAL_IP : POD_IP;
}
private static InetAddress findFirstNonLoopBackAddress() {
@@ -72,21 +61,4 @@ public class HostInfoHolder {
return null;
}
- private static HostInfo convertAddress(final InetAddress address) {
- HostInfo hostInfo = new HostInfo();
- String hostname = address.getHostName();
- hostInfo.setHostname(hostname);
- hostInfo.setIpAddress(address.getHostAddress());
- return hostInfo;
- }
-
- @Data
- public static class HostInfo {
-
- private String ipAddress;
-
- private String hostname;
-
- }
-
}
diff --git a/pom.xml b/pom.xml
index 5970e8b..bd3715d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,6 +87,7 @@
5.3.3
3.18.0
9.0.0
+ 2.7.11
0.10.4
2.0.2
3.9.1
@@ -422,6 +423,16 @@
apm-toolkit-logback-1.x
${skywalking-tooklit.version}
+
+ de.codecentric
+ spring-boot-admin-starter-server
+ ${spring-boot-admin.version}
+
+
+ de.codecentric
+ spring-boot-admin-starter-client
+ ${spring-boot-admin.version}
+
io.vavr
vavr
diff --git a/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/JSONLoggingInitializer.java b/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/JSONLoggingInitializer.java
index 49ec75a..92705cb 100644
--- a/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/JSONLoggingInitializer.java
+++ b/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/JSONLoggingInitializer.java
@@ -8,7 +8,6 @@ import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
import cn.hutool.json.JSONObject;
import com.schbrain.common.util.*;
-import com.schbrain.common.util.HostInfoHolder.HostInfo;
import com.schbrain.framework.autoconfigure.logger.logstash.EnhancedLogstashEncoder;
import com.schbrain.framework.autoconfigure.logger.properties.LoggingProperties;
import lombok.extern.slf4j.Slf4j;
@@ -126,11 +125,9 @@ public class JSONLoggingInitializer {
}
private String getCustomFields() {
- HostInfo hostInfo = HostInfoHolder.getHostInfo();
JSONObject customFields = new JSONObject();
customFields.set("appName", applicationName);
- customFields.set("hostName", hostInfo.getHostname());
- customFields.set("podIp", hostInfo.getIpAddress());
+ customFields.set("podIp", IpAddressHolder.getIpAddress());
return customFields.toString();
}
diff --git a/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/listener/LoggingConfigLoadedEventListener.java b/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/listener/LoggingConfigLoadedEventListener.java
index b663cfc..298a8a6 100644
--- a/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/listener/LoggingConfigLoadedEventListener.java
+++ b/starters/logger-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/logger/listener/LoggingConfigLoadedEventListener.java
@@ -5,9 +5,7 @@ import cn.hutool.system.SystemUtil;
import com.ctrip.framework.apollo.ConfigFile;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
-import com.google.common.collect.Maps;
-import com.schbrain.common.util.HostInfoHolder;
-import com.schbrain.common.util.HostInfoHolder.HostInfo;
+import com.schbrain.common.util.IpAddressHolder;
import com.schbrain.framework.autoconfigure.apollo.event.ConfigLoadedEvent;
import com.schbrain.framework.autoconfigure.apollo.event.listener.ConfigLoadedEventListenerAdaptor;
import com.schbrain.framework.autoconfigure.logger.JSONLoggingInitializer;
@@ -33,7 +31,7 @@ public class LoggingConfigLoadedEventListener extends ConfigLoadedEventListenerA
@Override
protected void onConfigLoaded(ConfigLoadedEvent event, LoggingProperties properties) {
- event.getPropertySource().addProperties(buildHostInfoProperties());
+ event.getPropertySource().addProperties(buildIpAddressProperties());
configLoggingFileLocation(event.getEnvironment(), properties.getLogConfigNamespace());
}
@@ -45,12 +43,8 @@ public class LoggingConfigLoadedEventListener extends ConfigLoadedEventListenerA
/**
* hostInfo properties, for logging pattern, used in logback-spring.xml
*/
- private Map buildHostInfoProperties() {
- HostInfo hostInfo = HostInfoHolder.getHostInfo();
- Map properties = Maps.newHashMapWithExpectedSize(2);
- properties.put("application.hostname", hostInfo.getHostname());
- properties.put("application.ipAddress", hostInfo.getIpAddress());
- return properties;
+ private Map buildIpAddressProperties() {
+ return Map.of("application.ipAddress", IpAddressHolder.getIpAddress());
}
/**
diff --git a/starters/xxl-job-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/xxl/properties/XxlJobProperties.java b/starters/xxl-job-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/xxl/properties/XxlJobProperties.java
index 701a23b..8e24756 100644
--- a/starters/xxl-job-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/xxl/properties/XxlJobProperties.java
+++ b/starters/xxl-job-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/xxl/properties/XxlJobProperties.java
@@ -1,6 +1,6 @@
package com.schbrain.framework.autoconfigure.xxl.properties;
-import com.schbrain.common.util.HostInfoHolder;
+import com.schbrain.common.util.IpAddressHolder;
import com.schbrain.common.util.support.ConfigurableProperties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -15,7 +15,7 @@ public class XxlJobProperties implements ConfigurableProperties {
private String adminAddresses;
- private String ip = HostInfoHolder.getHostInfo().getIpAddress();
+ private String ip = IpAddressHolder.getIpAddress();
private int port = -1;
diff --git a/support/schbrain-spring-support/pom.xml b/support/schbrain-spring-support/pom.xml
index 5f568de..d7de96b 100644
--- a/support/schbrain-spring-support/pom.xml
+++ b/support/schbrain-spring-support/pom.xml
@@ -20,16 +20,24 @@
org.springframework.boot
- spring-boot-starter-actuator
+ spring-boot-starter-aop
org.springframework.boot
- spring-boot-starter-aop
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
org.springframework.boot
spring-boot-configuration-processor
+
+ de.codecentric
+ spring-boot-admin-starter-client
+
org.springframework.boot
spring-boot-properties-migrator
diff --git a/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/AdminApplicationFactory.java b/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/AdminApplicationFactory.java
new file mode 100644
index 0000000..e8d028b
--- /dev/null
+++ b/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/AdminApplicationFactory.java
@@ -0,0 +1,38 @@
+package com.schbrain.framework.support.spring.admin;
+
+import com.schbrain.common.util.IpAddressHolder;
+import de.codecentric.boot.admin.client.config.InstanceProperties;
+import de.codecentric.boot.admin.client.registration.ServletApplicationFactory;
+import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
+import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
+import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath;
+
+import javax.servlet.ServletContext;
+
+/**
+ * @author liaozan
+ * @since 2023/10/26
+ */
+public class AdminApplicationFactory extends ServletApplicationFactory {
+
+ public AdminApplicationFactory(InstanceProperties instance, ManagementServerProperties management,
+ ServerProperties server, ServletContext servletContext, PathMappedEndpoints pathMappedEndpoints,
+ WebEndpointProperties webEndpoint, MetadataContributor metadataContributor,
+ DispatcherServletPath dispatcherServletPath) {
+ super(instance, management, server, servletContext, pathMappedEndpoints, webEndpoint, metadataContributor, dispatcherServletPath);
+ }
+
+ @Override
+ protected String getServiceHost() {
+ return IpAddressHolder.getIpAddress();
+ }
+
+ @Override
+ protected String getManagementHost() {
+ return IpAddressHolder.getIpAddress();
+ }
+
+}
diff --git a/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/SpringBootAdminFeatureAutoConfiguration.java b/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/SpringBootAdminFeatureAutoConfiguration.java
new file mode 100644
index 0000000..49efe24
--- /dev/null
+++ b/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/admin/SpringBootAdminFeatureAutoConfiguration.java
@@ -0,0 +1,35 @@
+package com.schbrain.framework.support.spring.admin;
+
+import de.codecentric.boot.admin.client.config.InstanceProperties;
+import de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration;
+import de.codecentric.boot.admin.client.registration.ApplicationFactory;
+import de.codecentric.boot.admin.client.registration.metadata.MetadataContributor;
+import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
+import org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath;
+import org.springframework.boot.cloud.CloudPlatform;
+import org.springframework.context.annotation.Bean;
+
+import javax.servlet.ServletContext;
+
+/**
+ * @author liaozan
+ * @since 2023/10/26
+ */
+@AutoConfiguration(before = SpringBootAdminClientAutoConfiguration.class)
+@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES)
+public class SpringBootAdminFeatureAutoConfiguration {
+
+ @Bean
+ public ApplicationFactory applicationFactory(InstanceProperties instance, ManagementServerProperties management,
+ ServerProperties server, ServletContext servletContext, PathMappedEndpoints pathMappedEndpoints,
+ WebEndpointProperties webEndpoint, MetadataContributor metadataContributor,
+ DispatcherServletPath dispatcherServletPath) {
+ return new AdminApplicationFactory(instance, management, server, servletContext, pathMappedEndpoints, webEndpoint, metadataContributor, dispatcherServletPath);
+ }
+
+}
diff --git a/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/env/DefaultPropertiesEnvironmentPostProcessor.java b/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/env/DefaultPropertiesEnvironmentPostProcessor.java
index 188d13d..cf9dbc4 100644
--- a/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/env/DefaultPropertiesEnvironmentPostProcessor.java
+++ b/support/schbrain-spring-support/src/main/java/com/schbrain/framework/support/spring/env/DefaultPropertiesEnvironmentPostProcessor.java
@@ -32,13 +32,17 @@ public class DefaultPropertiesEnvironmentPostProcessor extends LoggerAwareEnviro
private static final String SPRING_PROFILE_ACTIVE = "spring.profiles.active";
+ private final Map defaultProperties = new LinkedHashMap<>();
+
public DefaultPropertiesEnvironmentPostProcessor(DeferredLogFactory logFactory, ConfigurableBootstrapContext bootstrapContext) {
super(logFactory, bootstrapContext);
}
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
- Map defaultProperties = new LinkedHashMap<>();
+ // active profile
+ configureActiveProfileIfPresent(environment, defaultProperties);
+ environment.setDefaultProfiles(EnvUtils.DEVELOPMENT);
// management
defaultProperties.put("management.trace.http.enabled", false);
defaultProperties.put("management.endpoints.web.exposure.include", "*");
@@ -46,6 +50,7 @@ public class DefaultPropertiesEnvironmentPostProcessor extends LoggerAwareEnviro
defaultProperties.put("management.endpoint.health.show-details", Show.ALWAYS.name());
defaultProperties.put("management.endpoint.health.show-components", Show.ALWAYS.name());
defaultProperties.put("management.info.git.mode", Mode.FULL.name());
+ defaultProperties.put("management.info.env.enabled", true);
defaultProperties.put("management.server.port", PortUtils.findAvailablePort(1024));
// servlet
defaultProperties.put("spring.servlet.multipart.max-file-size", DataSize.ofBytes(-1).toString());
@@ -64,9 +69,9 @@ public class DefaultPropertiesEnvironmentPostProcessor extends LoggerAwareEnviro
defaultProperties.put("spring.main.allow-circular-references", true);
defaultProperties.put("spring.main.banner-mode", Banner.Mode.OFF.name());
defaultProperties.put("server.shutdown", Shutdown.GRACEFUL.name());
- // active profile
- configureActiveProfileIfPresent(environment, defaultProperties);
- environment.setDefaultProfiles(EnvUtils.DEVELOPMENT);
+ if (EnvUtils.runningOnCloudPlatform(environment)) {
+ defaultProperties.put("spring.boot.admin.client.url", "http://spring-boot-admin-server.devops:8019");
+ }
DefaultPropertiesPropertySource.addOrMerge(defaultProperties, environment.getPropertySources());
}
diff --git a/support/schbrain-spring-support/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/support/schbrain-spring-support/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 89f8c31..31bc5ac 100644
--- a/support/schbrain-spring-support/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/support/schbrain-spring-support/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,2 +1,3 @@
+com.schbrain.framework.support.spring.admin.SpringBootAdminFeatureAutoConfiguration
com.schbrain.framework.support.spring.elasticsearch.ElasticsearchFeatureAutoConfiguration
com.schbrain.framework.support.spring.redisson.RedissonFeatureAutoConfiguration
--
GitLab