diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 0e72f4fe..072d2eda 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -46,6 +46,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.util.StringUtils; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.EurekaInstanceConfig; @@ -73,6 +74,12 @@ public class EurekaClientAutoConfiguration { @Value("${server.port:${SERVER_PORT:${PORT:8080}}}") int nonSecurePort; + @Value("${management.port:${MANAGEMENT_PORT:${PORT:8080}}}") + int managementPort; + + @Value("${eureka.instance.hostname:${EUREKA_INSTANCE_HOSTNAME:}}") + String hostname; + @Autowired ConfigurableEnvironment env; @@ -93,6 +100,16 @@ public class EurekaClientAutoConfiguration { EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean(); instance.setNonSecurePort(this.nonSecurePort); instance.setInstanceId(getDefaultInstanceId(this.env)); + if (this.managementPort != this.nonSecurePort && this.managementPort != 0) { + if (StringUtils.hasText(this.hostname)) { + instance.setHostname(this.hostname); + } + String scheme = instance.getSecurePortEnabled() ? "https" : "http"; + instance.setStatusPageUrl(scheme + "://" + instance.getHostname() + ":" + + this.managementPort + instance.getStatusPageUrlPath()); + instance.setHealthCheckUrl(scheme + "://" + instance.getHostname() + ":" + + this.managementPort + instance.getHealthCheckUrlPath()); + } return instance; } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 6493e829..58b5ef14 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -21,12 +21,14 @@ import org.junit.Test; import org.springframework.aop.scope.ScopedProxyFactoryBean; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.springframework.boot.test.EnvironmentTestUtils.addEnvironment; /** @@ -68,6 +70,28 @@ public class EurekaClientAutoConfigurationTests { this.context.getBeanDefinition("eurekaClient").getFactoryMethodName()); } + @Test + public void managementPort() { + EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + "management.port=9999"); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertTrue("Wrong status page: " + instance.getStatusPageUrl(), + instance.getStatusPageUrl().contains("9999")); + } + + @Test + public void hostname() { + EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + "management.port=9999", "eureka.instance.hostname=foo"); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertTrue("Wrong status page: " + instance.getStatusPageUrl(), + instance.getStatusPageUrl().contains("foo")); + } + @Test public void refreshScopedBeans() { setupContext(RefreshAutoConfiguration.class); diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java index ce02ef78..8c71135d 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java @@ -56,16 +56,19 @@ public class SidecarConfiguration { @Value("${server.port:${SERVER_PORT:${PORT:8080}}}") private int serverPort = 8080; + @Value("${management.port:${MANAGEMENT_PORT:${PORT:8080}}}") + private int managementPort = 8080; + @Bean public EurekaInstanceConfigBean eurekaInstanceConfigBean() { EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(); - int port = sidecarProperties.getPort(); + int port = this.sidecarProperties.getPort(); config.setNonSecurePort(port); String scheme = config.getSecurePortEnabled() ? "https" : "http"; config.setStatusPageUrl(scheme + "://" + config.getHostname() + ":" - + this.serverPort + config.getStatusPageUrlPath()); + + this.managementPort + config.getStatusPageUrlPath()); config.setHealthCheckUrl(scheme + "://" + config.getHostname() + ":" - + this.serverPort + config.getHealthCheckUrlPath()); + + this.managementPort + config.getHealthCheckUrlPath()); config.setHomePageUrl(scheme + "://" + config.getHostname() + ":" + port + config.getHomePageUrlPath()); return config;