版權聲明:本文為 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