发布于 

数据库连接超时

Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30013ms.

问题描述

之前写好的监测程序跑着跑着就会报错,报错信息提示连接不可用,请求超时

但是该错误并不是一直显示,正常运行时偶尔会报错,然后过段时间又可以正常运行

解决思路

猜测是数据库连接堵塞的问题,在application.yml中配置数据库连接池,增加最大连接数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
spring:
datasource:
# 连接池
hikari:
#连接池名
pool-name: GISMonitorHikariCP
#最小空闲连接数
minimum-idle: 10
# 空闲连接存活最大时间,默认600000(10分钟)
idle-timeout: 180000
# 连接池最大连接数,默认是10
maximum-pool-size: 64
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
auto-commit: true
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
max-lifetime: 1800000
# 数据库连接超时时间,默认30秒,即30000
connection-timeout: 30000
connection-test-query: SELECT 1

但是运行了一段时间还是报错了,重新看了下报错,发现提示连接数过多

修改mysql的my.ini配置文件,设置最大连接数

重启mysql后继续运行监测程序,运行两天未见报错

通过SQL语句监测线程数目,数目在设置范围内正常波动