使用java/Spring/Ibatis sqlserver
是数据库而datasource
是org.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>
答案 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()