2

使用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>
4

2 回答 2

5

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

<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>
于 2013-01-17T10:13:56.500 回答
0

是的,我们可以做到,只需为您的 dao 类启用 jmx,该类注入了 jdbcTemplate 并被 dao 方法使用,并使用创建公共 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() 
于 2012-10-16T15:02:54.227 回答