使用jmx的Spring数据源连接管理器来公开实时连接数

时间:2012-10-16 14:18:40

标签: connection-pooling spring-jdbc spring-jmx

使用java/Spring/Ibatis sqlserver是数据库而datasourceorg.apache.commons.dbcp.BasicDataSource以下是我希望公开实时连接池计数的数据源对象,例如现在使用的数量和数量在空闲状态下,我希望使用jmx进行监控,以便快速了解如何实施

<bean id="wssModelDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbcx.JtdsDataSource"/>
    <property name="url" value="com.wss.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://x-x2/x_control_QA;appName=wss;sendStringParametersAsUnicode=false;loginTimeout=20;socketTimeout=180"/>
    <property name="username" value="xxx"/>
    <property name="password" value="xxx"/>
    <property name="maxActive" value="10"/>
    <property name="maxWait" value="10000"/>
  </bean>

2 个答案:

答案 0 :(得分:5)

接受的答案并没有真正告诉你如何做到这一点。如果您使用Spring,可能的解决方案是使用MethodNameBasedMBeanInfoAssembler并列出您需要公开的BasicDataSource上的方法。假设您有一个配置了ID为dataSource的bean,请将其添加到您的Spring XML config

<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
    <property name="locateExistingServerIfPossible" value="true" />
</bean>
<bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter">
    <property name="assembler">
      <bean class="org.springframework.jmx.export.assembler.MethodNameBasedMBeanInfoAssembler">
        <property name="managedMethods">
        <list>
          <value>getNumActive</value>
          <value>getMaxActive</value>
          <value>getNumIdle</value>
          <value>getMaxIdle</value>
          <value>getMaxWait</value>
          <value>getInitialSize</value>
          </list>
        </property>
      </bean>
    </property>
    <property name="beans">
        <map>                   
        <entry key="dataSource:name=DataSource" value-ref="dataSource"/>    
    </map>
    </property>
    <property name="server" ref="mbeanServer" />
    </bean>
</beans>

答案 1 :(得分:1)

是的,我们可以这样做,只需为你的dao类启用jmx,它注入了jdbcTemplate并由dao方法使用,并使用create public getter方法返回以下方法的值,在这里你去jmx可以监视你。

http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/BasicDataSource.html

getMinIdle() 
          Returns the minimum number of idle connections in the pool.
 int    getNumActive() 
          [Read Only] The current number of active connections that have been allocated from this data source.
 int    getNumIdle()