1. 程式人生 > 實用技巧 >com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 6000, active 20, maxActive 20

com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 6000, active 20, maxActive 20

異常現象

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" />

新增如上配置還可以很清楚地看到是在哪裡開啟的連線未關閉一直在佔有。但是會影響程式的效能。

注意事項

此配置項會影響效能,只在排查的時候開啟,系統執行時最好關閉。