某个项目启动时超慢,启动到一半进程自动停掉,有的时候十分钟才能启动,重复测试后发现是数据库连接的问题。
环境
Spring Framework 整合 Druid 配置 DataSource
1
2
3
4
5
6
7
8
9
10
11<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
...
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="25200000" />
...
</bean>MySQL 5.7
问题
异常日志:
1 | The last packet successfully received from the server was 540,992 milliseconds ago. The last packet sent successfully to the server was 540,993 milliseconds ago. |
日志中可以看出是数据库连接的问题
解决
数据库层面
查阅资料发现是应用打开数据库连接后,操作数据库时,连接超时被 MySQL 关闭了,查看 MySQL 官方文档,查看超时配置:
可以更改 MySQL 配置文件将改属性值扩大,或者直接使用 set
命令而无需重启数据库。
应用配置层面
将 DruidDataSource
中的属性 testOnBorrow(申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。)
、testOnReturn(归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。)
改为 true
,重启应用即可。
将数据库连接 URL 后加上 autoReconnect=true
,当连接断开时自动重连。