From 8a8b02ecf99b37a11a76324ca627b49783e8d62e Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 13 Sep 2016 08:26:04 -0600 Subject: [PATCH] Don't register with consul in bootstrap. This allows the normal consul lifecycle to register and properly deregister when using config client discovery. fixes gh-213 --- .../ConsulDiscoveryClientConfiguration.java | 3 ++- ...lientConfigServiceBootstrapConfiguration.java | 16 +++++++++++++--- ...lientConfigServiceAutoConfigurationTests.java | 2 +- spring-cloud-consul-sample/pom.xml | 4 ++++ src/test/resources/etc/configserver.json | 7 +++++++ 5 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/etc/configserver.json diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java index 46124d3d..9529ef63 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.cloud.consul.discovery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.commons.util.InetUtils; @@ -52,7 +53,7 @@ public class ConsulDiscoveryClientConfiguration { private ServletContext servletContext; @Bean - @ConditionalOnMissingBean + @ConditionalOnMissingBean(search = SearchStrategy.CURRENT) public ConsulLifecycle consulLifecycle(ConsulDiscoveryProperties discoveryProperties, HeartbeatProperties heartbeatProperties) { ConsulLifecycle lifecycle = new ConsulLifecycle(consulClient, discoveryProperties, heartbeatProperties); diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulDiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulDiscoveryClientConfigServiceBootstrapConfiguration.java index 289251db..d65b5a8e 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulDiscoveryClientConfigServiceBootstrapConfiguration.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulDiscoveryClientConfigServiceBootstrapConfiguration.java @@ -18,21 +18,31 @@ package org.springframework.cloud.consul.discovery.configclient; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.commons.util.InetUtils; import org.springframework.cloud.config.client.ConfigServicePropertySourceLocator; import org.springframework.cloud.consul.ConsulAutoConfiguration; import org.springframework.cloud.consul.discovery.ConsulDiscoveryClientConfiguration; +import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; /** - * Eureka-specific helper for config client that wants to lookup the config server via - * discovery. + * Helper for config client that wants to lookup the config server via discovery. * - * @author Dave Syer + * @author Spencer Gibb */ @ConditionalOnClass(ConfigServicePropertySourceLocator.class) @ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled", matchIfMissing = false) @Configuration @Import({ ConsulAutoConfiguration.class, ConsulDiscoveryClientConfiguration.class}) public class ConsulDiscoveryClientConfigServiceBootstrapConfiguration { + + @Bean + public ConsulDiscoveryProperties consulDiscoveryProperties(InetUtils inetUtils) { + ConsulDiscoveryProperties properties = new ConsulDiscoveryProperties(inetUtils); + // for bootstrap, lifecycle (and hence registration) is not needed, just discovery client + properties.getLifecycle().setEnabled(false); + return properties; + } } diff --git a/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java index 94ed8211..f5c10bd3 100644 --- a/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java +++ b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java @@ -22,7 +22,7 @@ import org.junit.After; import org.junit.Test; import org.mockito.Mockito; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.test.EnvironmentTestUtils; +import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.commons.util.UtilAutoConfiguration; diff --git a/spring-cloud-consul-sample/pom.xml b/spring-cloud-consul-sample/pom.xml index 3fba1d85..7afb2e05 100644 --- a/spring-cloud-consul-sample/pom.xml +++ b/spring-cloud-consul-sample/pom.xml @@ -48,6 +48,10 @@ org.springframework.cloud spring-cloud-starter-consul-all + + org.springframework.cloud + spring-cloud-starter-config + org.springframework.cloud spring-cloud-starter-feign diff --git a/src/test/resources/etc/configserver.json b/src/test/resources/etc/configserver.json new file mode 100644 index 00000000..a40a5044 --- /dev/null +++ b/src/test/resources/etc/configserver.json @@ -0,0 +1,7 @@ +{ + "service": { + "name": "configserver", + "address": "127.0.0.1", + "port": 8888 + } +}