異常現象
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 6000, active 20, maxActive 20, creating 0
異常描述
從異常現象中 com.alibaba.druid.pool.GetConnectionTimeoutException 可以看到錯誤信息提示是阿里巴巴Druid數據庫連接池的數據庫獲取連接超時異常原因,具體為 active 20,活動的連接數為20, maxActive 20, 最大的連接數為20, 意思很明顯,活動的連接數與最大連接數相同,連接用完了,在等待(我寫的配置是6000毫秒即6秒)新的連接,卻沒有新連接可用,然后超時了。
解決方案
在配置中添加如下Druid的配置即可:(我的是properties配置,所以我選擇的是第一種)
1、properties配置文件中:
#druid recycle Druid的連接回收機制 #超過時間限制是否回收 spring.datasource.druid.removeAbandoned = true #超時時間;單位為秒。180秒=3分鍾 spring.datasource.druid.removeAbandonedTimeout = 180 #關閉abanded連接時輸出錯誤日志 spring.datasource.druid.logAbandoned = true
2、xml配置文件中:
<!-- 超過時間限制是否回收 -->
<property name="removeAbandoned" value="true" />
<!-- 超時時間;單位為秒。180秒=3分鍾 -->
<property name="removeAbandonedTimeout" value="180" />
<!-- 關閉abanded連接時輸出錯誤日志 -->
<property name="logAbandoned" value="true" />
添加如上配置還可以很清楚地看到是在哪里打開的連接未關閉一直在占有。但是會影響程序的性能。
注意事項
此配置項會影響性能,只在排查的時候打開,系統運行時最好關閉。