美文网首页
JAVA进阶篇(11)—获取项目所在机器的IP地址和项目的jar

JAVA进阶篇(11)—获取项目所在机器的IP地址和项目的jar

作者: 小胖学编程 | 来源:发表于2020-12-15 14:27 被阅读0次

在实际开发中,一般我们的服务是集群部署,有时候需要去读取服务所在的ip地址。

1.获取项目的本机地址

1.1 作用

  1. 获取ip地址,一般可作为本集群中服务的唯一标识。
  2. 报警时,可输出服务所在的机器ip,快速定位问题。

1.2 获取方法

public class IpUtil{
   public static String getLinuxLocalIp() {
        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();
                            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);
        }
    }

2. 获取当前主机信息&&获取进程信息

2.1 获取当前主机信息

/**
 * 获取当前主机信息(内网IP及主机名),用来获取server相关信息的工具方法
 */
public class HostInfoUtils {

    private static final String IP;
    private static final String HOST_NAME;

    static {
        try {
            InetAddress host = InetAddress.getLocalHost();
            HOST_NAME = Optional.ofNullable(host).map(InetAddress::getHostName).orElse(null);
            IP = InetAddress.getByName(HOST_NAME).getHostAddress();
        } catch (UnknownHostException e) {
            throw new UncheckedIOException(e.getMessage(), e);
        }
    }

    public static String getHostIp() {
        return IP;
    }

    public static String getHostName() {
        return HOST_NAME;
    }
}

2.2 获取进程信息

@Slf4j
public class ProcessInfoUtils {

    private static final String UNKNOWN_BOOTSTRAP = "n/a";

    private static volatile Integer pid;
    private static final int UNKNOWN_PID = -1;
    private static volatile String bootstrap;

    private static String MAIN_CLASS;

    static {
        try {
            MAIN_CLASS = StringUtils.split(System.getProperty("sun.java.command"), ' ')[0];
        } catch (Exception e) {
            log.error("", e);
            MAIN_CLASS = null;
        }
    }

    public static String getMainClass() {
        return MAIN_CLASS;
    }

    public static int getPid() {
        if (pid == null) {
            synchronized (ProcessInfoUtils.class) {
                if (pid == null) {
                    try {
                        String name = ManagementFactory.getRuntimeMXBean().getName();
                        pid = Integer.parseInt(name.substring(0, name.indexOf('@')));
                    } catch (Exception e) {
                        pid = UNKNOWN_PID;
                    }
                }
            }
        }
        return pid;
    }

    public static String getBootstrap() {
        if (bootstrap == null) {
            synchronized (ProcessInfoUtils.class) {
                if (bootstrap == null) {
                    try {
                        bootstrap = ofNullable(getProperty("sun.java.command"))
                                .orElse(UNKNOWN_BOOTSTRAP);
                    } catch (Throwable e) {
                        bootstrap = UNKNOWN_BOOTSTRAP;
                    }
                }
            }
        }
        return bootstrap;
    }
}

推荐阅读

服务器如何获取请求IP

MAC查看本机地址方式——终端下输入ifconfig | grep "inet"

相关文章

网友评论

      本文标题:JAVA进阶篇(11)—获取项目所在机器的IP地址和项目的jar

      本文链接:https://www.haomeiwen.com/subject/jhlwgktx.html