From e1bd05394fe33f622b34b100eb942e7853d68828 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 22 Dec 2015 18:34:19 -0700 Subject: [PATCH] Update to use InetUtils bean. --- ...ZookeeperDiscoveryClientConfiguration.java | 5 +- .../discovery/ZookeeperServiceDiscovery.java | 55 +++++-------------- .../CustomZookeeperServiceDiscovery.groovy | 5 +- 3 files changed, 21 insertions(+), 44 deletions(-) diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClientConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClientConfiguration.java index 2ce9934c..a693058a 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClientConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperDiscoveryClientConfiguration.java @@ -25,6 +25,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.util.InetUtils; import org.springframework.cloud.zookeeper.discovery.dependency.ZookeeperDependencies; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -50,9 +51,9 @@ public class ZookeeperDiscoveryClientConfiguration { @Bean @ConditionalOnMissingBean - public ZookeeperServiceDiscovery zookeeperServiceDiscovery() { + public ZookeeperServiceDiscovery zookeeperServiceDiscovery(InetUtils inetUtils) { return new ZookeeperServiceDiscovery(curator, zookeeperDiscoveryProperties(), - instanceSerializer()); + instanceSerializer(), inetUtils); } @Bean diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceDiscovery.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceDiscovery.java index 0e6a31da..1e2bab61 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceDiscovery.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/ZookeeperServiceDiscovery.java @@ -16,7 +16,10 @@ package org.springframework.cloud.zookeeper.discovery; -import lombok.SneakyThrows; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + import org.apache.curator.framework.CuratorFramework; import org.apache.curator.x.discovery.ServiceDiscovery; import org.apache.curator.x.discovery.ServiceDiscoveryBuilder; @@ -25,18 +28,11 @@ import org.apache.curator.x.discovery.UriSpec; import org.apache.curator.x.discovery.details.InstanceSerializer; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.util.InetUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.util.Assert; -import java.io.IOException; -import java.net.Inet4Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.util.Enumeration; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; +import lombok.SneakyThrows; /** * @author Spencer Gibb @@ -49,6 +45,8 @@ public class ZookeeperServiceDiscovery implements ApplicationContextAware { private InstanceSerializer instanceSerializer; + private InetUtils inetUtils; + private ApplicationContext context; private AtomicBoolean built = new AtomicBoolean(false); @@ -62,10 +60,13 @@ public class ZookeeperServiceDiscovery implements ApplicationContextAware { @Value("${spring.application.name:application}") private String appName; - public ZookeeperServiceDiscovery(CuratorFramework curator, ZookeeperDiscoveryProperties properties, InstanceSerializer instanceSerializer) { + public ZookeeperServiceDiscovery(CuratorFramework curator, + ZookeeperDiscoveryProperties properties, + InstanceSerializer instanceSerializer, InetUtils inetUtils) { this.curator = curator; this.properties = properties; this.instanceSerializer = instanceSerializer; + this.inetUtils = inetUtils; } public int getPort() { @@ -135,36 +136,8 @@ public class ZookeeperServiceDiscovery implements ApplicationContextAware { // @formatter:on } - - /** - * Return a non loopback IPv4 address for the machine running this process. - * If the machine has multiple network interfaces, the IP address for the - * first interface returned by {@link java.net.NetworkInterface#getNetworkInterfaces} - * is returned. - * - * @return non loopback IPv4 address for the machine running this process - * @see java.net.NetworkInterface#getNetworkInterfaces - * @see java.net.NetworkInterface#getInetAddresses - */ - public static String getIpAddress() { - try { - for (Enumeration enumNic = NetworkInterface.getNetworkInterfaces(); - enumNic.hasMoreElements(); ) { - NetworkInterface ifc = enumNic.nextElement(); - if (ifc.isUp()) { - for (Enumeration enumAddr = ifc.getInetAddresses(); - enumAddr.hasMoreElements(); ) { - InetAddress address = enumAddr.nextElement(); - if (address instanceof Inet4Address && !address.isLoopbackAddress()) { - return address.getHostAddress(); - } - } - } - } - } catch (IOException e) { - // ignore - } - return "unknown"; + public String getIpAddress() { + return this.inetUtils.findFirstNonLoopbackAddress().getHostAddress(); } protected AtomicReference> getServiceDiscoveryRef() { diff --git a/spring-cloud-zookeeper-discovery/src/test/groovy/org/springframework/cloud/zookeeper/discovery/CustomZookeeperServiceDiscovery.groovy b/spring-cloud-zookeeper-discovery/src/test/groovy/org/springframework/cloud/zookeeper/discovery/CustomZookeeperServiceDiscovery.groovy index 0af34b48..a4936d85 100644 --- a/spring-cloud-zookeeper-discovery/src/test/groovy/org/springframework/cloud/zookeeper/discovery/CustomZookeeperServiceDiscovery.groovy +++ b/spring-cloud-zookeeper-discovery/src/test/groovy/org/springframework/cloud/zookeeper/discovery/CustomZookeeperServiceDiscovery.groovy @@ -1,5 +1,8 @@ package org.springframework.cloud.zookeeper.discovery +import org.springframework.cloud.util.InetUtils +import org.springframework.cloud.util.InetUtilsProperties + import javax.annotation.PreDestroy import org.apache.curator.framework.CuratorFramework @@ -13,7 +16,7 @@ class CustomZookeeperServiceDiscovery extends ZookeeperServiceDiscovery { private final String basePath CustomZookeeperServiceDiscovery(String applicationName, String basePath, CuratorFramework curator) { - super(curator, null, null) + super(curator, null, null, new InetUtils(new InetUtilsProperties())) this.applicationName = applicationName this.basePath = basePath build()