天天看點

AbandonedObjectPool is used (org.apache.commons.dbcp.AbandonedObjectPool@7b3106ec)

版權聲明:本文為 testcs_dn(微wx笑) 原創文章,非商用自由轉載-保持署名-注明出處,謝謝。 https://blog.csdn.net/testcs_dn/article/details/79714935

在有資料庫操作的 Controller 的方法的前後都添加

System.out.println

在控制台中會看到兩個輸出中間多了一部分資訊:

AbandonedObjectPool is used (org.apache.commons.dbcp.AbandonedObjectPool@7b3106ec)
   LogAbandoned: true
   RemoveAbandoned: true
   RemoveAbandonedTimeout: 10           

這是一個日志資訊,由dbcp連接配接池輸出。

在配置時,主要難以了解的主要有:removeAbandoned 、logAbandoned、removeAbandonedTimeout、maxWait這四個參數,設定了rmoveAbandoned=true 那麼在getNumActive()快要到getMaxActive()的時候,系統會進行無效的Connection的回收,回收的 Connection為removeAbandonedTimeout(預設300秒)中設定的秒數後沒有使用的Connection,激活回收機制好像是getNumActive()=getMaxActive()-2。 有點忘了。 

  logAbandoned=true的話,将會在回收事件後,在log中列印出回收Connection的錯誤資訊,包括在哪個地方用了Connection卻忘記關閉了,在調試的時候很有用。 

  在這裡私人建議maxWait的時間不要設得太長,maxWait如果設定太長那麼用戶端會等待很久才激發回收事件。 

  以下是我的配置的properties檔案: 

#連接配接設定 

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver 

jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:DBSERVER 

jdbc.username=user 

jdbc.password=pass 

#<!-- 初始化連接配接 --> 

dataSource.initialSize=10 

#<!-- 最大空閑連接配接 --> 

dataSource.maxIdle=20 

#<!-- 最小空閑連接配接 --> 

dataSource.minIdle=5 

#最大連接配接數量 

dataSource.maxActive=50 

#是否在自動回收逾時連接配接的時候列印連接配接的逾時錯誤 

dataSource.logAbandoned=true 

#是否自動回收逾時連接配接 

dataSource.removeAbandoned=true 

#逾時時間(以秒數為機關) 

dataSource.removeAbandonedTimeout=180 

#<!-- 逾時等待時間以毫秒為機關 6000毫秒/1000等于60秒 --> 

dataSource.maxWait=1000