From 191a1ccc359be4ed084c3938142f2a487afe9aa4 Mon Sep 17 00:00:00 2001 From: Jon Schneider Date: Thu, 6 Aug 2015 20:50:13 -0700 Subject: [PATCH] make EurekaClient available before smart lifecycle phase 0 --- .../eureka/EurekaClientAutoConfiguration.java | 33 ++++++++++++ .../EurekaDiscoveryClientConfiguration.java | 50 +++++-------------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 8dc5e34c..8cea5a6e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -21,6 +21,9 @@ import java.util.concurrent.ConcurrentMap; import javax.annotation.PostConstruct; +import lombok.SneakyThrows; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -28,6 +31,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.builder.ParentContextApplicationContextInitializer; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.event.HeartbeatEvent; import org.springframework.cloud.client.discovery.event.ParentHeartbeatEvent; import org.springframework.cloud.client.discovery.noop.NoopDiscoveryClientAutoConfiguration; @@ -37,7 +41,10 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.EurekaInstanceConfig; +import com.netflix.appinfo.InstanceInfo; +import com.netflix.discovery.EurekaClient; import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.converters.XmlXStream; @@ -53,6 +60,9 @@ public class EurekaClientAutoConfiguration implements ApplicationListener listenerAdded = new ConcurrentHashMap<>(); + @Autowired + private ApplicationContext context; + @Value("${server.port:${SERVER_PORT:${PORT:8080}}}") int nonSecurePort; @@ -77,6 +87,29 @@ public class EurekaClientAutoConfiguration implements ApplicationListener 0) { @@ -95,11 +94,11 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order + " with eureka with status " + this.instanceConfig.getInitialStatus()); - applicationInfoManager().setInstanceStatus( + applicationInfoManager.setInstanceStatus( this.instanceConfig.getInitialStatus()); if (this.healthCheckHandler != null) { - eurekaClient().registerHealthCheck(this.healthCheckHandler); + eurekaClient.registerHealthCheck(this.healthCheckHandler); } this.context.publishEvent(new InstanceRegisteredEvent<>(this, this.instanceConfig)); @@ -111,8 +110,8 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order public void stop() { log.info("Unregistering application " + this.instanceConfig.getAppname() + " with eureka with status DOWN"); - if (applicationInfoManager().getInfo() != null) { - applicationInfoManager().setInstanceStatus( + if (applicationInfoManager.getInfo() != null) { + applicationInfoManager.setInstanceStatus( InstanceStatus.DOWN); } this.running.set(false); @@ -144,30 +143,6 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order return this.order; } - @Bean - @ConditionalOnMissingBean(EurekaClient.class) - @SneakyThrows - public EurekaClient eurekaClient() { - return new CloudEurekaClient(applicationInfoManager(), clientConfig, context); - } - - @Bean - @ConditionalOnMissingBean(ApplicationInfoManager.class) - public ApplicationInfoManager applicationInfoManager() { - return new ApplicationInfoManager(instanceConfig, instanceInfo()); - } - - @Bean - @ConditionalOnMissingBean(InstanceInfo.class) - public InstanceInfo instanceInfo() { - return new InstanceInfoFactory().create(instanceConfig); - } - - @Bean - public DiscoveryClient discoveryClient() { - return new EurekaDiscoveryClient(); - } - @Bean protected ApplicationListener containerPortInitializer() { return new ApplicationListener() { @@ -192,8 +167,7 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order @Bean @ConditionalOnMissingBean - public EurekaHealthIndicator eurekaHealthIndicator( -EurekaClient eurekaClient, + public EurekaHealthIndicator eurekaHealthIndicator(EurekaClient eurekaClient, EurekaInstanceConfig config) { CompositeMetricReader metrics = new CompositeMetricReader(this.metricReaders.toArray(new MetricReader[0])); return new EurekaHealthIndicator(eurekaClient, metrics, config);