欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

dbcp连接池在数据库异常恢复后不能正常工作问题解决,dbcp,dbcp的连接池在数据库

来源: javaer 分享于  点击 14840 次 点评:245

dbcp连接池在数据库异常恢复后不能正常工作问题解决,dbcp,dbcp的连接池在数据库


dbcp的连接池在数据库出现网络问题,或者数据库服务器down机时会出现异常,这里出异常是正常的,但是在数据库恢复正常之后还是不能正常工作。

一直提示:

Caused by: java.util.NoSuchElementException: Timeout waiting for idle object    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134)    at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79)    at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)    ... 3 more

这是因为在数据库出问题时,连接池里的活动连接对象占满了连接池,可以看连接池的dataSource.getNumActive()此值的值和连接池的最大活动连接数一致。 而这些活动连接都是错误的。

我们可以通过下面的配置:

validationQuery="select 1 as dbcp_connection_test"testOnBorrow=true

来修复此问题, validationQuery指定一个检测连接是否有效的sql语句, testOnBorrow=true指定在从连接池中拿连接时,要检查连接是否有效,若无效会将连接从连接池中移除掉。

更多dbcp配置,请参考官网。

相关栏目:

用户点评