Eureka server is itself a eureka client when discovering eureka peers (it gets DiscoverClient from DiscoveryManager). Make sure DiscoveryManager is initialzed regardless of if the client or server config is invoked first.
fixes gh-18
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user