获取当前服务端口

windows下和Linux下获取服务端口方法有所不同。

主要是那个querynames方法里是否限制查询条件(Http)

 public String getHttpUrl() {
        try {
            String ip = InetAddress.getLocalHost().getHostAddress();
            MBeanServer server;
//            List<MBeanServer> list = null;
            if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
                logger.info("====size="+MBeanServerFactory.findMBeanServer(null).size());
                server = MBeanServerFactory.findMBeanServer(null).get(0);
//                list = MBeanServerFactory.findMBeanServer(null);
            } else {
                logger.error("no MBeanServer! ip="+ip);
                return ip;
            }
//            printServers(list);
            Set names = server.queryNames(new ObjectName("Catalina:type=Connector,*"),
                    Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
            logger.info("====names size="+names.size());
            Iterator iterator = names.iterator();
            if (iterator.hasNext()) {
                //windows获得端口的方法(Linux环境下,获取不到)
                ObjectName name = (ObjectName) iterator.next();
                logger.info(name.getCanonicalName()+"==  Server! ip="+ip+":"+Integer.parseInt(server.getAttribute(name, "port").toString()));
                return ip+":"+Integer.parseInt(server.getAttribute(name, "port").toString());
            }else{
                names = server.queryNames(new ObjectName("Catalina:type=Connector,*"),null);
                logger.info("===linux names :"+names.size());
                iterator = names.iterator();
                if (iterator.hasNext()) {
                    //Linux获得端口的方法 
                    ObjectName name = (ObjectName) iterator.next();
                    logger.info(name.getCanonicalName()+"==  linux server! ip="+ip+":"+Integer.parseInt(server.getAttribute(name, "port").toString()));
                    return ip+":"+Integer.parseInt(server.getAttribute(name, "port").toString());
                }
            }
            logger.info("不是规范的 ip="+ip);
            return ip;

        } catch (Exception e) {
            logger.error("获取当前服务IP地址异常",e);
            return "";
        }
    }

    public void printServers(List<MBeanServer> list ) throws Exception {
        logger.info("=====================printServers begin======================");
        for(MBeanServer server:list){
            Set names = server.queryNames(new ObjectName("*:type=Connector,*"),
             Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
            logger.info("********************names :"+names.size());
            Iterator iterator = names.iterator();
            while (iterator.hasNext()) {
                //windows获得端口的方法Linux获取不到
                ObjectName name = (ObjectName) iterator.next();;
                logger.info(name.getCanonicalName()+"******************** :"+Integer.parseInt(server.getAttribute(name, "port").toString()));
            }
            names = server.queryNames(new ObjectName("*:type=Connector,*"),
                    null);
            logger.info("#########names :"+names.size());
             iterator = names.iterator();
            while (iterator.hasNext()) {
                //Linux获得端口的方法 
                ObjectName name = (ObjectName) iterator.next();
                logger.info(name.getCanonicalName()+"######### :"+Integer.parseInt(server.getAttribute(name, "port").toString()));
            }

            names = server.queryNames(new ObjectName("Catalina:type=Connector,*"),null);
            logger.info("@@@@@@@@@@@@@@@@@@@@@@@@@ names :"+names.size());
            iterator = names.iterator();
            while (iterator.hasNext()) {
                //windows获得端口的方法Linux获取不到
                ObjectName name = (ObjectName) iterator.next();
                logger.info(name.getCanonicalName()+"@@@@@@@@@@@@@@@@@@@@@ :"+Integer.parseInt(server.getAttribute(name, "port").toString()));
            }
        }
        logger.info("=====================printServers end======================");
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值