目录
异常现象
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 20, maxActive 20, creating 0
异常描述
从异常现象中 com.alibaba.druid.pool.GetConnectionTimeoutException 可以看到错误信息提示是阿里巴巴Druid数据库连接池的数据库获取连接超时异常原因,具体为 active 20,活动的连接数为20, maxActive 20, 最大的连接数为20, 意思很明显,活动的连接数与最大连接数相同,连接用完了,在等待(我写的配置是60000毫秒即60秒)新的连接,却没有新连接可用,然后超时了。
解决方案
在配置中添加如下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" />
添加如上配置还可以很清楚地看到是在哪里打开的连接未关闭一直在占有。但是会影响程序的性能。
注意事项
此配置项会影响性能,只在排查的时候打开,系统运行时最好关闭。