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======================");
}