我在我的应用程序中使用pooledDataSources。 PooledDataSource的Mbean的ObjectName包含变量部分。例如:
ObjectName = com.mchange.v2.c3p0:type = PooledDataSource [z8kfsx9c4bily2r1i962 | 23696a1b]
变量为z8kfsx9c4bily2r1i962 | 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>
提前致谢
答案 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。