diff --git a/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaClientAutoConfiguration.java index 83252b7c..ca203c15 100644 --- a/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaClientAutoConfiguration.java @@ -15,7 +15,6 @@ */ package org.springframework.platform.netflix.eureka; -import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.slf4j.Logger; @@ -25,8 +24,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationListener; +import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.core.Ordered; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.InstanceInfo.InstanceStatus; @@ -43,10 +44,14 @@ import com.netflix.discovery.EurekaClientConfig; @ConditionalOnClass(EurekaClientConfig.class) @ConditionalOnExpression("${eureka.client.enabled:true}") public class EurekaClientAutoConfiguration implements - ApplicationListener { + ApplicationListener, SmartLifecycle, Ordered { private static final Logger logger = LoggerFactory.getLogger(EurekaClientAutoConfiguration.class); + private boolean running; + + private int order = 0; + @Autowired private EurekaClientConfigBean clientConfig; @@ -55,19 +60,49 @@ public class EurekaClientAutoConfiguration implements @Override public void onApplicationEvent(ContextRefreshedEvent event) { - logger.info("Registering application {} with eureka with status UP", instanceConfig.getAppname()); + logger.info("Registering application {} with eureka with status UP", instanceConfig.getAppname()); ApplicationInfoManager.getInstance().setInstanceStatus(InstanceStatus.UP); } - @PostConstruct - public void init() { - DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig); - } - @PreDestroy public void close() { logger.info("Removing application {} from eureka", instanceConfig.getAppname()); DiscoveryManager.getInstance().shutdownComponent(); } + + @Override + public void start() { + DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig); + } + + @Override + public void stop() { + running = false; + } + @Override + public boolean isRunning() { + return running; + } + + @Override + public int getPhase() { + return 0; + } + + @Override + public boolean isAutoStartup() { + return true; + } + + @Override + public void stop(Runnable callback) { + callback.run(); + } + + @Override + public int getOrder() { + return order; + } + } diff --git a/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaServerAutoConfiguration.java b/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaServerAutoConfiguration.java index 187ef46e..d6abaf70 100644 --- a/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaServerAutoConfiguration.java +++ b/spring-platform-netflix-core/src/main/java/org/springframework/platform/netflix/eureka/EurekaServerAutoConfiguration.java @@ -25,6 +25,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.ApplicationContext; import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; import org.springframework.web.context.ServletContextAware; import com.netflix.blitz4j.LoggingConfiguration; @@ -42,7 +43,7 @@ import com.netflix.eureka.PeerAwareInstanceRegistry; @ConditionalOnClass(EurekaServerConfig.class) @ConditionalOnExpression("${eureka.server.enabled:true}") public class EurekaServerAutoConfiguration implements ServletContextAware, - SmartLifecycle { + SmartLifecycle, Ordered { @Autowired private EurekaServerConfig eurekaServerConfig; @@ -54,6 +55,8 @@ public class EurekaServerAutoConfiguration implements ServletContextAware, private boolean running; + private int order = 0; + @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; @@ -105,4 +108,9 @@ public class EurekaServerAutoConfiguration implements ServletContextAware, callback.run(); } + @Override + public int getOrder() { + return order; + } + } diff --git a/spring-platform-netflix-core/src/test/java/org/springframework/platform/netflix/eureka/EurekaClientConfigBeanTests.java b/spring-platform-netflix-core/src/test/java/org/springframework/platform/netflix/eureka/EurekaClientConfigBeanTests.java index e68d8aca..ee5d2f4d 100644 --- a/spring-platform-netflix-core/src/test/java/org/springframework/platform/netflix/eureka/EurekaClientConfigBeanTests.java +++ b/spring-platform-netflix-core/src/test/java/org/springframework/platform/netflix/eureka/EurekaClientConfigBeanTests.java @@ -17,6 +17,8 @@ package org.springframework.platform.netflix.eureka; import static org.junit.Assert.assertEquals; +import java.util.Collections; + import org.junit.After; import org.junit.Test; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; @@ -24,6 +26,8 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.CompositePropertySource; +import org.springframework.core.env.MapPropertySource; /** * @author Dave Syer @@ -66,6 +70,24 @@ public class EurekaClientConfigBeanTests { .getEurekaServerServiceUrls("defaultZone").toString()); } + @Test + public void serviceUrlWithCompositePropertySource() { + CompositePropertySource source = new CompositePropertySource("composite"); + context.getEnvironment().getPropertySources().addFirst(source); + source.addPropertySource(new MapPropertySource("config", Collections + . singletonMap("eureka.client.serviceUrl.defaultZone", + "http://example.com"))); + context.register(PropertyPlaceholderAutoConfiguration.class, + TestConfiguration.class); + context.refresh(); + assertEquals("{defaultZone=http://example.com}", + context.getBean(EurekaClientConfigBean.class).getServiceUrl().toString()); + assertEquals( + "[http://example.com]", + context.getBean(EurekaClientConfigBean.class) + .getEurekaServerServiceUrls("defaultZone").toString()); + } + @Test public void serviceUrlWithDefault() { EnvironmentTestUtils.addEnvironment(context,