2014-01-22 41 views
3

我使用的是Oracle连接池通过以下Spring配置我的数据源:如何通过JMX公开Oracle连接池统计信息?

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"> 
    <property name="connectionCachingEnabled" value="true" /> 
    <property name="URL" value="myUrl" /> 
    <property name="user" value="myUserName" /> 
    <property name="password" value="myPassword" /> 
    <property name="connectionCacheProperties"> 
     <util:properties> 
      <prop key="InitialLimit">5</prop> 
      <prop key="MinLimit">5</prop> 
      <prop key="MaxLimit">30</prop> 
      <prop key="MaxStatementsLimit">20</prop> 
     </util:properties> 
    </property> 
</bean> 

我想揭露通过JMX这个池的统计数据,这样我可以监控池,看看有多少连接在池中,有多少处于忙碌状态等等。

我使用oracle 11.2.0.3.0 jdbc驱动程序连接到Oracle 10g服务器。

我该怎么做?

回答

1

试试这个 -

MethodNameBasedMBeanInfoAssembler

public class MethodNameBasedMBeanInfoAssembler 

AbstractReflectiveMBeanInfoAssembler子类,允许到 指定要公开的方法名称作为MBean ope口粮和属性。 JavaBean获取器和设置器将自动公开为JMX 属性。

您可以通过managedMethods 属性提供一组方法名称。如果你有多个bean,并且你希望每个bean使用一组不同的方法名称,那么你可以将bean密钥(即用于传递bean的 名称到MBeanExporter)映射到方法列表 名称使用methodMappings财产。

如果您指定了methodMappingsmanagedMethods, 的值,Spring将首先尝试在映射中查找方法名称。如果找不到该方法的 方法名称,它将使用managedMethods定义的方法名称 。

例如 -

... 
<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> 
我没有使用DBCP
+0

这工作揭露mbean,但它没有公开任何属性。我认为这是因为http://docs.oracle.com/cd/E18283_01/appdev.112/e13995/oracle/jdbc/pool/OracleDataSource.html没有任何这些方法,例如。 getNumActive等... – Adam