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