diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java index 0a87e58e..ffd67df5 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java @@ -16,9 +16,11 @@ package org.springframework.cloud.alibaba.nacos; +import org.springframework.boot.ApplicationRunner; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.alibaba.nacos.registry.NacosAutoServiceRegistration; @@ -66,4 +68,21 @@ public class NacosDiscoveryAutoConfiguration { return new NacosAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration); } + + @Bean + @ConditionalOnBean(NacosAutoServiceRegistration.class) // NacosAutoServiceRegistration should be present + @ConditionalOnNotWebApplication // Not Web Application + public ApplicationRunner applicationRunner(NacosAutoServiceRegistration nacosAutoServiceRegistration) { + return args -> { + // WebServerInitializedEvent should not be multicast in Non-Web environment. + // Whatever, NacosAutoServiceRegistration must be checked it's running or not. + if (!nacosAutoServiceRegistration.isRunning()) { // If it's not running, let it start. + // FIXME: Please make sure "spring.cloud.nacos.discovery.port" must be configured on an available port, + // or the startup or Nacos health check will be failed. + nacosAutoServiceRegistration.start(); + // NacosAutoServiceRegistration will be stopped after its destroy() method is invoked. + // @PreDestroy destroy() -> stop() + } + }; + } } \ No newline at end of file