Tomcat 连接池 MBean 并不总是出现在扫描中
Tomcat connection pool MBeans don't always show up in scan
我正在使用一些代码来监视我的 Tomcat (9) 个连接池。但是,当我扫描 Datasource MBean 时,返回的结果并不一致。有人能解释为什么会这样吗?
有时我会得到三个 MBean(数据源 + 连接池 + 连接):
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote",connectionpool=connections,connection=1
DESC: Information on the management interface of the MBean
CLAS: org.apache.tomcat.dbcp.dbcp2.PoolableConnection
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote"
DESC: null
CLAS: org.apache.tomcat.util.modeler.BaseModelMBean
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote",connectionpool=connections
DESC: Information on the management interface of the MBean
CLAS: org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool
但在其他时候,连接池不会出现在扫描中。我只有一个简单的数据源:
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote"
DESC: null
CLAS: org.apache.tomcat.util.modeler.BaseModelMBean
为什么连接池 MBean 不总是可用?
正如您在评论中注意到的,连接池对应的 MBean 仅在 getConnection
首次调用后创建。
但是,自 DBCP 2.8.0, which is shipped with Tomcat 9.0.38 及更高版本以来,您在 BasicDataSourceMXBean
上有一个操作 start()
,它允许您在不创建任何连接的情况下创建池。
我正在使用一些代码来监视我的 Tomcat (9) 个连接池。但是,当我扫描 Datasource MBean 时,返回的结果并不一致。有人能解释为什么会这样吗?
有时我会得到三个 MBean(数据源 + 连接池 + 连接):
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote",connectionpool=connections,connection=1
DESC: Information on the management interface of the MBean
CLAS: org.apache.tomcat.dbcp.dbcp2.PoolableConnection
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote"
DESC: null
CLAS: org.apache.tomcat.util.modeler.BaseModelMBean
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote",connectionpool=connections
DESC: Information on the management interface of the MBean
CLAS: org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool
但在其他时候,连接池不会出现在扫描中。我只有一个简单的数据源:
NAME: Catalina:type=DataSource,host=localhost,context=/,class=javax.sql.DataSource,name="jdbc/evote"
DESC: null
CLAS: org.apache.tomcat.util.modeler.BaseModelMBean
为什么连接池 MBean 不总是可用?
正如您在评论中注意到的,连接池对应的 MBean 仅在 getConnection
首次调用后创建。
但是,自 DBCP 2.8.0, which is shipped with Tomcat 9.0.38 及更高版本以来,您在 BasicDataSourceMXBean
上有一个操作 start()
,它允许您在不创建任何连接的情况下创建池。