如何获取 c3p0 mbeans 对象的固定对象名称

How to get fixed object name for c3p0 mbeans object

我在我的应用程序中使用 pooledDataSources。 PooledDataSource 的 Mbean 的 ObjectName 包含可变部分。例如:

ObjectName = com.mchange.v2.c3p0:type=PooledDataSource[z8kfsx9c4bily2​​r1i962|23696a1b]

变量为 z8kfsx9c4bily2​​r1i962|23696a1b,每次我重新启动服务时它都会改变。为了监控目的,我必须为我的 mbean 获取固定的 ObjectName。我正在使用 jmx 进行监控。我试图覆盖 vmid 属性,但它似乎不可写 属性。对此做了很多研究,但 运行 运气不好。

我的Jmx配置如下:

<jmxtrans-agent> <queries> <!-- C3P0 --> <query objectName="com.mchange.v2.c3p0:type=PooledDataSource" attribute="threadPoolNumTasksPending" resultAlias="cp.threadPoolNumTasksPending"/> </queries> </jmxtrans-agent>

提前致谢

默认情况下,c3p0 JMX 名称如下所示:

com.mchange.v2.c3p0:type=PooledDataSource,identityToken=<variable, opaque token>

为了获得常量标识符,必须设置确保 属性 dataSourceName 已设置。最好的方法是在构建时给你的 DataSource 一个名字:

ComboPooledDataSource cpds = new ComboPooledDataSource("Jojo")

但您也可以像任何其他 c3p0 配置一样设置 dataSourceName 属性。

然后您将拥有如下所示的 JMX 名称:

com.mchange.v2.c3p0:type=PooledDataSource,identityToken=<variable, opaque token>,name=Jojo

许多 JMX 客户端允许您搜索属性,因此这足以为您提供永久监视器。

如果你真的需要一个常量的、固定的、JMX 名称,你可以设置 属性

com.mchange.v2.c3p0.management.ExcludeIdentityToken=true

这可以放在 c3p0.properties 文件中,作为系统 属性,或作为 HOCON/typesafe 配置路径,具体取决于您配置 c3p0 的方式。如果您设置此 属性 并且 还设置 dataSourceName (同样,通过构造函数或在您的配置中),那么您的 JMX 名称将是一个可预测的固定字符串, 喜欢

com.mchange.v2.c3p0:type=PooledDataSource,name=Jojo

由您来确保这些名称是唯一的。

注意:com.mchange.v2.c3p0.management.ExcludeIdentityToken=true 是一个新功能,请确保您使用的是最新的 c3p0-0.9.5.1

有关详细信息,请参阅 c3p0 的 JMX configuration docs