dbcp的連接池在數據庫出現網(wǎng)絡(luò )問(wèn)題,或者數據庫服務(wù)器down機時(shí)會(huì )出現異常,這里出異常是正常的,但是在數據庫恢復正常之后還是不能正常工作。
一直提示:
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
這是因為在數據庫出問(wèn)題時(shí),連接池里的活動(dòng)連接對象占滿(mǎn)了連接池,可以看連接池的dataSource.getNumActive()此值的值和連接池的最大活動(dòng)連接數一致。 而這些活動(dòng)連接都是錯誤的。
我們可以通過(guò)下面的配置:
validationQuery="select 1 as dbcp_connection_test"testOnBorrow=true
來(lái)修復此問(wèn)題, validationQuery指定一個(gè)檢測連接是否有效的sql語(yǔ)句, testOnBorrow=true指定在從連接池中拿連接時(shí),要檢查連接是否有效,若無(wú)效會(huì )將連接從連接池中移除掉。
更多dbcp配置,請參考官網(wǎng)。
聯(lián)系客服