java.sql.SQLException: Already closed.

問題:

SEVERE: Error occured while attempting to query data
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:114)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:191)
at org.apache.commons.dbutils.DbUtils.close(DbUtils.java:50)
at org.apache.commons.dbutils.AbstractQueryRunner.close(AbstractQueryRunner.java:409)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:358)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:306)
at com.cmcc.imark.dao.BaseDao.find(BaseDao.java:130)

可能原因:

1.數據庫連接時間較長,自動關閉,當再次查詢數據時報錯。

2.檢查sql語句是否正確,數據庫連接是否正常關閉。

解決方法:

在數據源配置文件中新增以下屬性:

<property name="testOnBorrow">
<value>true</value>
</property>
<property name="validationQuery">
<value>SELECT 1 FROM DUAL</value>
</property>

 其中,

testOnBorrow true :指明是否在從池中取出連接前進行檢驗。如果檢驗失敗,則從池中去除連接並嘗試取出另一個。

validationQuery : SQL查詢,用來驗證從連接池取出的連接,在將連接返回給調用者之前,如果指定,則查詢必須是一個SQL SELECT並且必須返回至少一行記錄。另外, dual表是oracle裏的,mysql可以直接寫select 1。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章