获取Hibernate的当前连接数

对于ssh开发,一旦出现:

 org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object

这样的错误,是很纠结了。意思是你连接池满了。此时最好能监视当前的连接数,这样调试起来要方便很多。一种方法是查看Oracle数据库的系统表v$session,这张表保存当前的每一个数据库连接。但这里的连接实连接,有时HIbernate的连接池满不是实连接的问题,而是dataSource维护的连接满了。例如,我的Hibernate的dataSource使用Spring管理,配置如下:

 class="org.apache.commons.dbcp.BasicDataSource"
 destroy-method="close">
 
  oracle.jdbc.driver.OracleDriver
 

 
  jdbc:oracle:thin:@127.0.0.1:1521:orcl
 

 
  xxx
 

 
  xxx
 
  
 
  100
 

 
  3000
 

 
  20
 

注意这里的maxActive参数,它就是数据源的最大连接数,一旦当前连接数达到此阈值,后来的连接请求必须排队。所以一方面可以通过修改此阈值提高系统效率。

言归正传,如果要获取当前的连接数,可以先获取此bean,然后访问他的numActive数据就可以获取当前连接数了。示例代码如下:
BasicDataSource dataSource = (BasicDataSource)SpringTools.getBean("dataSource");
System.out.println(dataSource.getNumActive());

就是这么简单,但是网上却很难找到,呵呵。

你可能感兴趣的:(J2EE)