From 7c93f9d0e8ee4ce67e32a2179e14aa8e278f507b Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 25 Aug 2016 14:07:50 -0600 Subject: [PATCH] Support war deployments with discovery. server.port must be set. fixes gh-173 --- .../ConsulDiscoveryClientConfiguration.java | 21 ++++++++++++++++++- .../consul/discovery/ConsulLifecycle.java | 19 ++++++++++++----- 2 files changed, 34 insertions(+), 6 deletions(-) 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 6c5cb312..46124d3d 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 @@ -28,6 +28,8 @@ import org.springframework.context.annotation.Configuration; import com.ecwid.consul.v1.ConsulClient; +import javax.servlet.ServletContext; + /** * @author Spencer Gibb */ @@ -43,11 +45,28 @@ public class ConsulDiscoveryClientConfiguration { @Autowired(required = false) private ServerProperties serverProperties; + @Autowired(required = false) + private TtlScheduler ttlScheduler; + + @Autowired(required = false) + private ServletContext servletContext; + @Bean @ConditionalOnMissingBean public ConsulLifecycle consulLifecycle(ConsulDiscoveryProperties discoveryProperties, HeartbeatProperties heartbeatProperties) { - return new ConsulLifecycle(consulClient, discoveryProperties, heartbeatProperties); + ConsulLifecycle lifecycle = new ConsulLifecycle(consulClient, discoveryProperties, heartbeatProperties); + if (this.ttlScheduler != null) { + lifecycle.setTtlScheduler(this.ttlScheduler); + } + if (this.servletContext != null) { + lifecycle.setServletContext(this.servletContext); + } + if (this.serverProperties != null && this.serverProperties.getPort() != null && this.serverProperties.getPort() > 0) { + // no need to wait for events for this to start since the user has explicitly set the port. + lifecycle.setPort(this.serverProperties.getPort()); + } + return lifecycle; } @Bean diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java index 8f911ddf..97db33bc 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java @@ -21,9 +21,6 @@ import java.util.List; import javax.servlet.ServletContext; -import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.AbstractDiscoveryLifecycle; import org.springframework.retry.annotation.Retryable; import org.springframework.util.Assert; @@ -32,6 +29,8 @@ import org.springframework.util.StringUtils; import com.ecwid.consul.v1.ConsulClient; import com.ecwid.consul.v1.agent.model.NewService; +import lombok.extern.slf4j.Slf4j; + /** * @author Spencer Gibb */ @@ -46,10 +45,8 @@ public class ConsulLifecycle extends AbstractDiscoveryLifecycle { private HeartbeatProperties ttlConfig; - @Autowired(required = false) private TtlScheduler ttlScheduler; - @Autowired(required = false) private ServletContext servletContext; private NewService service = new NewService(); @@ -60,6 +57,14 @@ public class ConsulLifecycle extends AbstractDiscoveryLifecycle { this.ttlConfig = ttlConfig; } + public void setTtlScheduler(TtlScheduler ttlScheduler) { + this.ttlScheduler = ttlScheduler; + } + + public void setServletContext(ServletContext servletContext) { + this.servletContext = servletContext; + } + @Override protected int getConfiguredPort() { return service.getPort() == null? 0 : service.getPort(); @@ -70,6 +75,10 @@ public class ConsulLifecycle extends AbstractDiscoveryLifecycle { service.setPort(port); } + public void setPort(int port) { + getPort().set(port); + } + @Override @Retryable(interceptor = "consulRetryInterceptor") public void start() {