From 51ea8afb2450d85c609d9c3ca7db7739b41d58a1 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 9 Oct 2015 11:47:56 -0600 Subject: [PATCH] Set port on InstanceInfo to support random server.port. fixes gh-570 --- .../EurekaDiscoveryClientConfiguration.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java index f7f341ff..63057d44 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java @@ -16,9 +16,13 @@ package org.springframework.cloud.netflix.eureka; +import java.lang.reflect.Field; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import lombok.SneakyThrows; +import lombok.extern.apachecommons.CommonsLog; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.endpoint.Endpoint; import org.springframework.boot.actuate.health.HealthAggregator; @@ -39,16 +43,16 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.EventListener; import org.springframework.core.Ordered; +import org.springframework.util.ReflectionUtils; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.EurekaInstanceConfig; import com.netflix.appinfo.HealthCheckHandler; +import com.netflix.appinfo.InstanceInfo; import com.netflix.appinfo.InstanceInfo.InstanceStatus; import com.netflix.discovery.EurekaClient; import com.netflix.discovery.EurekaClientConfig; -import lombok.extern.apachecommons.CommonsLog; - /** * @author Dave Syer * @author Spencer Gibb @@ -83,11 +87,15 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order @Autowired private EurekaClient eurekaClient; + @Autowired + private InstanceInfo instanceInfo; + @Override public void start() { // only set the port if the nonSecurePort is 0 and this.port != 0 if (this.port.get() != 0 && this.instanceConfig.getNonSecurePort() == 0) { this.instanceConfig.setNonSecurePort(this.port.get()); + setInstanceInfoPort(); } // only initialize if nonSecurePort is greater than 0 and it isn't already running @@ -114,6 +122,13 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order } } + @SneakyThrows + private void setInstanceInfoPort() { + Field port = ReflectionUtils.findField(InstanceInfo.class, "port"); + ReflectionUtils.makeAccessible(port); + port.setInt(this.instanceInfo, this.port.get()); + } + @Override public void stop() { if (this.applicationInfoManager.getInfo() != null) {