分享

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

 icecity1306 2015-01-27

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配置,请参考官网

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多