diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index cb30a5a6..ff0df147 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -88,9 +88,6 @@ public class EurekaClientAutoConfiguration { @Value("${management.port:${MANAGEMENT_PORT:${server.port:${SERVER_PORT:${PORT:8080}}}}}") private int managementPort; - @Value("${eureka.instance.hostname:${EUREKA_INSTANCE_HOSTNAME:}}") - private String hostname; - @Autowired private ConfigurableEnvironment env; @@ -117,15 +114,18 @@ public class EurekaClientAutoConfiguration { @Bean @ConditionalOnMissingBean(value = EurekaInstanceConfig.class, search = SearchStrategy.CURRENT) public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils) { + RelaxedPropertyResolver relaxedPropertyResolver = new RelaxedPropertyResolver(env, "eureka.instance."); + String hostname = relaxedPropertyResolver.getProperty("hostname"); + boolean preferIpAddress = Boolean.parseBoolean(relaxedPropertyResolver.getProperty("preferIpAddress")); EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean(inetUtils); instance.setNonSecurePort(this.nonSecurePort); instance.setInstanceId(getDefaultInstanceId(this.env)); + instance.setPreferIpAddress(preferIpAddress); if (this.managementPort != this.nonSecurePort && this.managementPort != 0) { - if (StringUtils.hasText(this.hostname)) { - instance.setHostname(this.hostname); + if (StringUtils.hasText(hostname)) { + instance.setHostname(hostname); } - RelaxedPropertyResolver relaxedPropertyResolver = new RelaxedPropertyResolver(env, "eureka.instance."); String statusPageUrlPath = relaxedPropertyResolver.getProperty("statusPageUrlPath"); String healthCheckUrlPath = relaxedPropertyResolver.getProperty("healthCheckUrlPath"); if (StringUtils.hasText(statusPageUrlPath)) { diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 68bcd48a..ccd506ec 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -124,6 +124,20 @@ public class EurekaClientAutoConfigurationTests { instance.getStatusPageUrl().contains("/myStatusPage")); } + @Test + public void statusPageUrlAndPreferIpAddress() { + EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + "management.port=9999", "eureka.instance.hostname=foo", + "eureka.instance.preferIpAddress:true"); + + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + + assertEquals("statusPageUrl is wrong", "http://" + instance.getIpAddress() + ":9999/info", + instance.getStatusPageUrl()); + } + @Test public void healthCheckUrlPathAndManagementPortKabobCase() { EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989",