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(),它允许您在不创建任何连接的情况下创建池。