从JMX MBeans了解tomcat HTTP连接器端口

从JMX MBeans了解tomcat HTTP连接器端口,tomcat,jmx,Tomcat,Jmx,我正在通过JMX连接到tomcat。我编写了一个简单的JMX客户端来连接 并读取不同的JMX MBean属性来监视tomcat。我的问题是,我想知道tomcat的HTTP连接器正在监听哪个端口。有没有一种方法可以通过JMX Mbean获取此详细信息,而无需读取tomcat的server.xml文件。但是要通过一个MBean的一些属性来获取它,MBean被称为类似于Catalina:type=ThreadPool,name=http-8080的东西。如您所见,连接器端口位于名称中。每个连接器都有一


我正在通过JMX连接到tomcat。我编写了一个简单的JMX客户端来连接
并读取不同的JMX MBean属性来监视tomcat。我的问题是,我想知道tomcat的HTTP连接器正在监听哪个端口。有没有一种方法可以通过JMX Mbean获取此详细信息,而无需读取tomcat的server.xml文件。但是要通过一个MBean的一些属性来获取它,MBean被称为类似于Catalina:type=ThreadPool,name=http-8080的东西。如您所见,连接器端口位于名称中。

每个连接器都有一个专用MBean。您可以通过查询
*:type=Connector,*
来调用这些MBean的objectname。当然,可以有多个连接器。这些MBean有一个属性
port
,您可以从中查询端口号

如果使用,则可以使用

jmx4perl http://localhost:8080/jolokia read *:type=Connector,* port

{
  "Catalina:port=8009,type=Connector" => {
     port => 8009
  },
  "Catalina:port=8080,type=Connector" => {
     port => 8080
  }
}

如果tomcat没有在8080上运行,而在9090上运行,那么bean的名称将变成Catalina:type=ThreadPool,name=http-9090。在这种情况下,我需要知道http连接器正在运行哪个端口。在这种情况下,它在端口9090上运行。线程池的名称反映了http Conctor的端口。可能有一个愚蠢的问题——但我的问题是——有没有办法通过编程知道tomcat公开的bean的名称?您可以使用JConsole实用程序检查正在运行的应用程序的所有MBean。您可以使用
MBeanServerConnection.queryNames()
方法。例如,
queryNames(新的ObjectName(“Catalina:type=ThreadPool,*”,null))
应该返回所有
ThreadPool
MBean的列表。