在实际开发中,一般我们的服务是集群部署,有时候需要去读取服务所在的ip地址。
1.获取项目的本机地址
1.1 作用
获取ip地址,一般可作为本集群中服务的唯一标识。
报警时,可输出服务所在的机器ip,快速定位问题。
1.2 获取方法
public class IpUtil{
public static String getLinuxLocalIp() {
String ip = "";
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
String name = intf.getName();
if (!name.contains("docker") && !name.contains("lo")) {
for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
String ipaddress = inetAddress.getHostAddress();
if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
ip = ipaddress;
}
}
}
}
}
} catch (SocketException ex) {
ip = "127.0.0.1";
log.error("获取ip异常",ex);
}
return ip;
}
}
2. 获取项目运行时jar包的名称
public static void main(String[] args) {
try {
java.net.URL url = BigObjectMyBatisInterceptor.class.getProtectionDomain().getCodeSource().getLocation();
String urlName = java.net.URLDecoder.decode(url.getPath(), "utf-8");
//解析url的Name字段
if (urlName.contains("jar")) {
String[] jars = StringUtils.splitByWholeSeparator(urlName, ".jar");
String jarName = jars[0];
String[] strings = StringUtils.splitByWholeSeparator(jarName, File.separator);
String projectName = strings[strings.length - 1];
}
} catch (Exception e) {
log.error("",e);
}
}
推荐阅读