diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerIntitializer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerIntitializer.java new file mode 100644 index 00000000..b36cb952 --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerIntitializer.java @@ -0,0 +1,23 @@ +package org.springframework.cloud.netflix.eureka; + +import com.netflix.discovery.DiscoveryManager; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author Spencer Gibb + */ +public class DiscoveryManagerIntitializer { + + @Autowired + private EurekaClientConfigBean clientConfig; + + @Autowired + private EurekaInstanceConfigBean instanceConfig; + + + public synchronized void init() { + if (DiscoveryManager.getInstance().getDiscoveryClient() == null) { + DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig); + } + } +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java index 45711d33..a13298b0 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java @@ -79,7 +79,7 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered { public void start() { if (port != 0) { instanceConfig.setNonSecurePort(port); - DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig); + discoveryManagerIntitializer().init(); logger.info("Registering application {} with eureka with status UP", instanceConfig.getAppname()); ApplicationInfoManager.getInstance().setInstanceStatus(InstanceStatus.UP); @@ -119,6 +119,12 @@ public class EurekaClientConfiguration implements SmartLifecycle, Ordered { return order; } + @Bean + @ConditionalOnMissingBean(DiscoveryManagerIntitializer.class) + public DiscoveryManagerIntitializer discoveryManagerIntitializer() { + return new DiscoveryManagerIntitializer(); + } + @Bean @Lazy @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java index 45742709..9017a70d 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java @@ -28,7 +28,9 @@ import org.apache.commons.logging.LogFactory; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.netflix.eureka.DiscoveryManagerIntitializer; import org.springframework.cloud.netflix.eureka.EurekaServerConfigBean; import org.springframework.cloud.netflix.eureka.advice.PiggybackMethodInterceptor; import org.springframework.cloud.netflix.eureka.event.EurekaRegistryAvailableEvent; @@ -79,9 +81,16 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware this.servletContext = servletContext; } + @Bean + @ConditionalOnMissingBean(DiscoveryManagerIntitializer.class) + public DiscoveryManagerIntitializer discoveryManagerIntitializer() { + return new DiscoveryManagerIntitializer(); + } + @Override public void start() { - new Thread(new Runnable() { + discoveryManagerIntitializer().init(); + new Thread(new Runnable() { @Override public void run() { try {