因爲項目是部署在集羣上的,須要項目可以自動採集各機器的信息。java.net.InetAddress.getLocalHost()來獲取本地機器的IP和機器名信息,但發如今linux下並不能獲取到機器的實際IP和機器名信息(獲取到的是localhost/127.0.0.1)。java
根據系統類型(linux、windows)來經過不一樣的方式獲取本地機器的IP信息。linux
java.net.InetAddress.getLocalHost().getHostAddress();
/** * 獲取Linux下的IP地址 * * @return IP地址 * @throws SocketException */ private static String getLinuxLocalIp() throws SocketException { String ip = ""; try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); String name = intf.getName(); if (!name.contains("docker") && !name.contains("lo")) { for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ipaddress = inetAddress.getHostAddress().toString(); if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) { ip = ipaddress; } } } } } } catch (SocketException ex) { ip = "127.0.0.1"; ex.printStackTrace(); } return ip; }
/** * 判斷操做系統是不是Windows * * @return */ public static boolean isWindowsOS() { boolean isWindowsOS = false; // 注:這裏的system,系統指的是 JRE (runtime)system,不是指 OS String osName = System.getProperty("os.name"); if (osName.toLowerCase().indexOf("windows") > -1) { isWindowsOS = true; } return isWindowsOS; }
這裏關於System.getProperty("os.name")說明一下(參考自http://blog.csdn.net/brotherdong90/article/details/49073941)docker
key | 註釋 |
---|---|
file.separator | File separator (e.g., "/") |
java.class.path | Java classpath |
java.class.version | Java class version number |
java.home | Java installation directory |
java.vendor | Java vendor-specific string |
java.vendor.url | Java vendor URL |
java.version | Java version number |
line.separator | Line separator |
os.arch | Operating system architecture |
os.name | Operating system name |
path.separator | Path separator (e.g., ":") |
user.dir | User's current working directory |
user.home | User home directory |
user.name | User account name |
/** * 獲取本地IP地址 * * @throws SocketException */ public static String getLocalIP() throws UnknownHostException, SocketException { if (isWindowsOS()) { return InetAddress.getLocalHost().getHostAddress(); } else { return getLinuxLocalIp(); } }
https://www.cnblogs.com/raphael5200/p/5996464.htmlwindows