Azure Web Service部署Spring Boot+JPA应用时MySQL连接自动关闭求助
解决Azure上Spring Boot应用MySQL闲置连接断开问题
针对你遇到的Azure部署后闲置5分钟MySQL连接断开、无法自动重连的问题,按以下方案处理:
调整HikariCP连接池核心参数
Spring Boot默认使用HikariCP连接池,驱动层面的autoReconnect=true在连接池场景下无效,需要通过连接池的连接有效性检查机制解决:
在application.properties或application.yml中添加以下配置:# 设置连接最大存活时间(需小于MySQL的wait_timeout) spring.datasource.hikari.max-lifetime=120000 # 连接超时时间 spring.datasource.hikari.connection-timeout=30000 # 连接有效性验证超时时间 spring.datasource.hikari.validation-timeout=5000 # 空闲时验证连接有效性 spring.datasource.hikari.test-while-idle=true # 验证连接的SQL语句 spring.datasource.hikari.validation-query=SELECT 1原理:
test-while-idle会定期检查空闲连接的有效性,max-lifetime确保连接在被MySQL主动回收前就被连接池销毁重建。检查并调整MySQL服务器的超时参数
登录你的MySQL服务器,执行以下SQL查看超时设置:SHOW VARIABLES LIKE 'wait_timeout'; SHOW VARIABLES LIKE 'interactive_timeout';如果这两个参数的值小于你设置的
max-lifetime,MySQL会提前断开闲置连接。建议将其设置为大于max-lifetime的值(比如1小时):SET GLOBAL wait_timeout=3600; SET GLOBAL interactive_timeout=3600;注意:临时设置会在MySQL重启后失效,需修改配置文件(如
my.cnf)永久生效。移除连接字符串中的
autoReconnect=true
MySQL 8.0+驱动已废弃该参数,且在连接池管理连接的场景下,驱动层面的重连逻辑会与连接池的生命周期管理冲突,反而导致异常。辅助排查:Azure App Service闲置设置
虽然这不是连接断开的直接原因,但如果App Service开启了闲置休眠,可能加剧问题。可在Azure门户的App Service配置中开启“始终开启”选项,避免应用实例休眠。
内容的提问来源于stack exchange,提问作者Choppa dude
相关产品推荐
相关产品推荐

