美文网首页
容器相关

容器相关

作者: Magia | 来源:发表于2016-10-27 09:46 被阅读0次

区分单个容器多个实例的方法

1.Jboss domain
System.getProperties()参数中有[Server:server-one],可唯一确定实例

Set<?> keys = System.getProperties().keySet();
if (null != keys) {
    for (Object key : keys) {
        String k = (String) key;
        if (k.startsWith("[Server:")) {
            return k.substring(k.lastIndexOf(":") + 1, k.lastIndexOf("]"));
        }
    }
}

2.Jboss standalone
jboss standalone模式可通过获取端口号来区分不同的实例。
获取端口号方式如下:
1)通过request请求获取端口号
2)容器刚启动时,没有request的场景下,方式如下:
2.1)JMX方式(未成功,待继续调查)

try {       
        MBeanServer server = null;
        if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
            server = MBeanServerFactory.findMBeanServer(null).get(0);
        }

        Set names = server.queryNames(new ObjectName("Catalina:type=Server,*"), null);

        Iterator iterator = names.iterator();
        ObjectName name = null;
        while (iterator.hasNext()) {
            name = (ObjectName) iterator.next();
            String port = null;
            String protocol = server.getAttribute(name, "protocol").toString();
            if(protocol.contains("org.apache.coyote.http11.Http11Protocol")) {
                port = server.getAttribute(name, "port").toString();
            }
            if(protocol.contains("org.apache.coyote.http11.Http11NioProtocol")) {
                port = server.getAttribute(name, "port").toString();
            }
            if(protocol.contains("org.apache.coyote.http11.Http11AprProtocol")) {
                port = server.getAttribute(name, "port").toString();
            }
            port = server.getAttribute(name, "port").toString();
                
            System.out.println(port);
        }
} catch (Exception e) {
    e.printStackTrace();
}

    2.2)读取配置文件方式(本例采取的方式)

private static String readPortFromXMLFile(String filePath, String tagName, String portName, String httpName) {
    String port = null;
    try {
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);
            
        doc.getDocumentElement().normalize();
        NodeList nList = doc.getElementsByTagName(tagName);
            
        for(int i=0; i< nList.getLength(); i++) {
            Node nNode = nList.item(i);
            if(nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                if(null != httpName) {
                    if(eElement.getAttribute("name").equals(httpName)) {
                        port = eElement.getAttribute(portName);
                    }
                } else {
                    port = eElement.getAttribute(portName);
                }
            }
        }
    } catch (Exception e) {
        System.err.println("[FAIL] Error ocurres when reading port number from XMLFile");
        e.printStackTrace();
    }
    return port;
}
Properties prop = System.getProperties();
if(prop != null && prop.containsKey("jboss.server.base.dir")) {
     String instance = prop.getProperty("jboss.server.base.dir");
     String path = instance + File.separator + "configuration" + File.separator + "standalone.xml";
     String offsetStr = readPortFromXMLFile(path, "socket-binding-group", "port-offset", null);
     String offset = offsetStr.substring(offsetStr.lastIndexOf(":") + 1, offsetStr.length() - 1);
     String portStr = readPortFromXMLFile(path, "socket-binding", "port", "http");
     String port = portStr.substring(portStr.lastIndexOf(":") + 1, portStr.length() - 1);
     String server = String.valueOf(Integer.valueOf(port) + Integer.valueOf(offset));
     return server;
}

3.WAS
通过“server.root”和"sun.java.command"两个字段可区分不同实例。

Properties prop = System.getProperties();
if (prop != null && prop.containsKey("server.root")) {
    String server = prop.getProperty("server.root");
    String serverName = prop.getProperty("sun.java.command");
    serverName = serverName.substring(serverName.lastIndexOf(" ") + 1).trim();
    return server.substring(server.lastIndexOf("/") + 1)+"_"+serverName;
}

4.Tomcat
通过读取配置文件获取端口号的方式区分不同的实例。

Properties prop = System.getProperties();
if (prop != null && prop.containsKey("catalina.base")) {
    String instance = prop.getProperty("catalina.base");
    String path = instance + File.separator + "conf" + File.separator + "server.xml";
    String server = readPortFromXMLFile(path, "Server", "port", null);
    return server;
}           

5.Jetty
通过rjrport可区分不同的实例。

Properties prop = System.getProperties();
if (prop != null && prop.containsKey("rjrport")) {
    String server = prop.getProperty("rjrport");
    return server;
}

相关文章

  • docker操作命令记录

    "docker 常用命令" 仓库相关 容器相关 镜像相关 run命令相关 -d,后台运行容器, 并返回容器ID;不...

  • 容器相关

    区分单个容器多个实例的方法 1.Jboss domainSystem.getProperties()参数中有[Se...

  • Docker 相关的命令

    docker 相关 一、 docker查看全部容器命令docker ps -a 容器相关操作docker crea...

  • Java的juc相关容器,工具,框架介绍

    主要介绍Java相关并发容器,原子类,以及线程池框架 Java相关并发容器 ConcurrentHashMap采用...

  • 容器视图相关

    1.

  • Docker学习(一):Docker 基本命令

    一:Docker 镜像相关命令 注:不做特别说明,容器相关操作的例子都是用的容器名,没有使用容器ID 拉取镜像 显...

  • Spring:自定义类扫描器(扫包)

    相关文章:Spring:获取容器中的Bean相关文章:Spring Boot:容器加载时执行特定操作 前言 在我们...

  • 使用第一个容器

    一、容器操作 Docker镜像、容器、及相关配置,都存放在/var/lib/docker目录下 创建容器 停止容器...

  • Docker 简易操作

    本文转载于《Docker常见命令---简易教程》[1],若有侵权,请及时联系 容器相关操作 获取容器相关信息 导出...

  • Docker基本命令

    镜像操作相关命令 容器操作相关命令 访问Docker仓库 Docker数据管理 端口映射与容器互联 Dockerf...

网友评论

      本文标题:容器相关

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