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

时间:2015-09-27 16:31:51

标签: java spring jmx c3p0

我在我的应用程序中使用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>

提前致谢

1 个答案:

答案 0 :(得分:3)

默认情况下,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