数据库连接池异常
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 3005, active 10
原因
其实原因很简单就是我们的连接池中的连接使用完了,没有办法开辟新的连接.这个连接池技术是阿里巴巴的Druid数据库连接池技术, 意思很明显,活动的连接数与最大连接数相同,连接用完了,在等待新的连接,却没有新连接可用,然后超时了.
我产生错误的原因
我的错误就是在数据库操作的时候使用使用关闭数据连接的方法,也就是每次SQL操作之后没有释放数据库连接资源,然后导致了我的连接不够使用,
下面是我的配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=9672005
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
解决方法
1.给自己代码设置数据库连接池的资源释放
2.在配置中添加如下Druid的配置即可:设置超过时长时自动回收
#druid recycle Druid的连接回收机制
#超过时间限制是否回收
spring.datasource.druid.removeAbandoned = true
#超时时间;单位为秒。180秒=3分钟
spring.datasource.druid.removeAbandonedTimeout = 180
#关闭abanded连接时输出错误日志
spring.datasource.druid.logAbandoned = true
3、在xml配置文件中时设置自动回收:
<!-- 超过时间限制是否回收 -->
<property name="removeAbandoned" value="true" />
<!-- 超时时间;单位为秒。180秒=3分钟 -->
<property name="removeAbandonedTimeout" value="180" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
添加如上配置还可以很清楚地看到是在哪里打开的连接未关闭一直在占有。但是会影响程序的性能。一般情况下这种方法只使用在调试