关于超时报错,一共有五种超时参数,详见:MySQL常见报错分析及解决方案总结(7)---超时参数connect_timeout、interactive_timeout/wait_timeout、lock_wait_timeout、net等-CSDN博客

以下是当前报错的排查方法和解决方案:

MySQL 中的 interactive_timeout 和 wait_timeout 是控制数据库连接闲置超时的参数,当连接闲置时间超过设定值时,会触发超时断开,导致相关错误。

一、报错效果

Java 程序在连接 MySQL 后,若长时间未执行操作(超过超时阈值),再次执行 SQL 时会抛出连接中断错误,典型信息如下:

com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 360,000 milliseconds ago. The driver has not received any packets from the server recently.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Lost connection to MySQL server during query

更直接的提示可能包含:

java.sql.SQLException: No operations allowed after connection closed.

核心特征:连接成功建立后能正常操作,但闲置一段时间(如几小时)后,首次执行 SQL 会失败,需重新连接才能恢复。

二、引起报错的原因

  1. 连接闲置超时
    Java 程序建立的连接属于非交互式连接,受 wait_timeout 控制(默认 8 小时)。若程序长时间未执行 SQL(如夜间无人操作的系统),闲置时间超过 wait_timeout,MySQL 服务器会主动关闭连接释放资源,此时 Java 程序若未检测连接状态,继续使用已失效的连接就会报错。

  2. 参数设置过短
    若 MySQL 服务器的 wait_timeout 被手动改小(如 60 秒),即使程序短暂闲置(如处理业务逻辑耗时),也可能触发超时。

  3. 连接池配置问题
    若使用连接池(如 HikariCP、C3P0),但未配置 “连接有效性检测” 或 “闲置回收” 机制,连接池会认为断开的连接仍有效并分配给程序,导致报错。

  4. Windows 环境特有因素

    • Windows 防火墙或安全软件可能在连接闲置时主动断开 “空闲连接”,加速超时。
    • MySQL 服务在 Windows 上若配置了 “自动释放资源” 策略,可能比 Linux 更严格地执行超时回收。

三、解决办法

1. 调整 MySQL 的超时参数(通用方案)

延长 wait_timeout 以匹配程序的闲置需求(需重启 MySQL 生效):

  • 临时修改(当前会话有效,重启后失效):
    登录 MySQL 客户端(Windows 可通过 mysql -u root -p 命令),执行:
    set global wait_timeout = 86400;  -- 设为24小时(单位:秒)
    set global interactive_timeout = 86400;  -- 同步修改,避免冲突
    
  • 永久修改(推荐):
    找到 MySQL 配置文件(Windows 通常为 my.ini,路径可能在 C:\ProgramData\MySQL\MySQL Server x.x\ 或安装目录),在 [mysqld] 下添加:
    [mysqld]
    wait_timeout=86400
    interactive_timeout=86400
    
    重启 MySQL 服务:在 “服务” 中找到 “MySQL”,右键 “重启”。
2. Java 程序层面优化
  • 避免长期持有连接:执行完 SQL 后及时关闭连接(使用 try-with-resources 自动关闭):

    // 推荐写法:自动关闭连接、Statement、ResultSet
    try (Connection conn = DriverManager.getConnection(url, user, password);PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM table");ResultSet rs = pstmt.executeQuery()) {// 处理结果
    } catch (SQLException e) {e.printStackTrace();
    }
    
  • 添加连接心跳检测:在闲置时定期发送轻量 SQL(如 SELECT 1)保持连接活跃,例如:

    // 定时任务:每30分钟执行一次心跳
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    scheduler.scheduleAtFixedRate(() -> {try (Connection conn = getConnection()) {  // 从连接池获取连接conn.createStatement().execute("SELECT 1");} catch (SQLException e) {// 连接已失效,可触发重连逻辑}
    }, 0, 30, TimeUnit.MINUTES);
    
3. 连接池配置优化(重点)

若使用连接池(如 Spring Boot 默认的 HikariCP),需配置与 MySQL 超时匹配的参数,避免使用失效连接:

# Spring Boot 配置示例(application.yml)
spring:datasource:url: jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456hikari:maximum-pool-size: 10idle-timeout: 300000  # 连接池闲置超时(5分钟),需小于 MySQL 的 wait_timeoutmax-lifetime: 1800000  # 连接最大存活时间(30分钟),需小于 wait_timeoutconnection-test-query: SELECT 1  # 每次获取连接时检测有效性
  • 关键配置说明
    • idle-timeout:连接池自动回收闲置连接的时间,必须小于 MySQL 的 wait_timeout(如 MySQL 设为 24 小时,此处可设为 5-30 分钟)。
    • connection-test-query:获取连接时执行 SELECT 1 检测连接是否有效,无效则自动重建。
4. Windows 环境特殊处理
  • 关闭防火墙对 MySQL 连接的干扰
    进入 “Windows Defender 防火墙”→“高级设置”→“入站规则”,确保 MySQL 端口(默认 3306)的规则为 “允许连接”,且未勾选 “空闲时关闭连接”。
  • 检查 MySQL 服务状态
    在 “服务” 中确认 MySQL 服务启动类型为 “自动”,避免服务意外停止导致连接中断。

总结

Windows 上 Java 程序的 wait_timeout 错误核心仍是 “闲置连接被服务器断开”。解决需结合三方面:

  1. 合理设置 MySQL 的 wait_timeout 参数;
  2. 程序或连接池主动检测并维护连接有效性;
  3. 排除 Windows 环境(防火墙、服务)对连接的干扰。
    通过连接池配置 connection-test-query 和 idle-timeout 是最有效的长期解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95851.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95851.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95851.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第13章 Jenkins性能优化

13.1 性能优化概述 性能问题识别 常见性能瓶颈: Jenkins性能问题分类:1. 系统资源瓶颈- CPU使用率过高- 内存不足或泄漏- 磁盘I/O瓶颈- 网络带宽限制2. 应用层面问题- JVM配置不当- 垃圾回收频繁- 线程池配置问题- 数据库连接池不足3. 架构设计问题- 单点…

Python+DRVT 从外部调用 Revit:批量创建梁

今天让我们继续,看看如何批量创建常用的基础元素:梁。 跳过轴线为直线段形的,先从圆弧形的开始: from typing import List, Tuple import math # drvt_pybind 支持多会话、多文档,先从简单的单会话、单文档开始 # My…

水上乐园票务管理系统设计与开发(代码+数据库+LW)

摘 要 随着旅游业的蓬勃发展,水上乐园作为夏日娱乐的重要组成部分,其票务管理效率和服务质量直接影响游客体验。然而,传统的票务管理模式往往面临信息更新不及时、服务响应慢等问题。因此,本研究旨在通过设计并实现一个基于Spri…

【前端教程】JavaScript DOM 操作实战案例详解

案例1&#xff1a;操作div子节点并修改样式与内容 功能说明 获取div下的所有子节点&#xff0c;设置它们的背景颜色为红色&#xff1b;如果是p标签&#xff0c;将其内容设置为"我爱中国"。 实现代码 <!DOCTYPE html> <html> <head><meta ch…

qiankun+vite+react配置微前端

微前端框架&#xff1a;qiankun。 主应用&#xff1a;react19vite7&#xff0c;子应用1&#xff1a;react19vite7&#xff0c;子应用2 &#xff1a;react19vite7 一、主应用 1. 安装依赖 pnpm i qiankun 2. 注册子应用 (1) 在src目录下创建个文件夹&#xff0c;用来存储关于微…

git: 取消文件跟踪

场景&#xff1a;第一次初始化仓库的时候没有忽略.env或者node_modules&#xff0c;导致后面将.env加入.gitignore也不生效。 取消文件跟踪&#xff1a;如果是因为 node_modules 已被跟踪导致忽略无效&#xff0c; 可以使用命令git rm -r --cached node_modules来删除缓存&…

开讲啦|MBSE公开课:第五集 MBSE中期设想(下)

第五集 在本集课程中&#xff0c;刘玉生教授以MBSE建模工具选型及二次定制开发为核心切入点&#xff0c;系统阐释了"为何需要定制开发"与"如何实施定制开发"的实践逻辑&#xff0c;并提炼出MBSE中期实施的四大核心要素&#xff1a;高效高质建摸、跨域协同…

CSDN个人博客文章全面优化过程

两天前达到博客专家申请条件&#xff0c;兴高采烈去申请博客专家&#xff1a; 结果今天一看&#xff0c;申请被打回了&#xff1a; 我根据“是Yu欸”大神的博客&#xff1a; 【2024-完整版】python爬虫 批量查询自己所有CSDN文章的质量分&#xff1a;附整个实现流程_抓取csdn的…

Websocket的Key多少个字节

在WebSocket协议中&#xff0c;握手过程中的Sec-WebSocket-Key是一个由客户端生成的随机字符串&#xff0c;用于安全地建立WebSocket连接。这个Sec-WebSocket-Key是基于Base64编码的&#xff0c;并且通常由客户端在WebSocket握手请求的头部字段中发送。根据WebSocket协议规范&a…

SVT-AV1编码器中实现WPP依赖管理核心调度

一 assign_enc_dec_segments 函数。这个函数是 SVT-AV1 编码器中实现波前并行处理&#xff08;WPP&#xff09; 和分段依赖管理的核心调度器之一。//函数功能&#xff1a;分配编码解码段任务//返回值Bool//True 成功分配了一个段给当前线程&#xff0c;调用者应该处理这个段//F…

直接让前端请求代理到自己的本地服务器,告别CV报文到自己的API工具,解放双手

直接使用前端直接调用本地服务器&#xff0c;在自己的浏览器搜索插件proxyVerse&#xff0c;类似的插件应该还有一些&#xff0c;可以选择自己喜欢的这类插件可以将浏览器请求&#xff0c;直接转发到本地服务器&#xff0c;这样在本地调试的时候&#xff0c;不需要前端项目&…

Golang Goroutine 与 Channel:构建高效并发程序的基石

在当今这个多核处理器日益普及的时代&#xff0c;利用并发来提升程序的性能和响应能力已经成为软件开发的必然趋势。而Go语言&#xff0c;作为一门为并发而生的语言&#xff0c;其设计哲学中将“并发”置于核心地位。其中&#xff0c;Goroutines 和 Channels 是Go实现并发编程的…

17 C 语言宏进阶必看:从宏替换避坑到宏函数用法,不定参数模拟实现一次搞定

预处理详解1. 预定义符号//C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件--预处理阶段被替换成指向文件名字符串的指针--char* 类型的变量 __LINE__ //⽂件当前的⾏号 --预处理阶段替换成使用…

深入剖析 HarmonyOS ArkUI 声明式开发:状态管理艺术与最佳实践

好的&#xff0c;请看这篇关于 HarmonyOS ArkUI 声明式开发范式与状态管理的技术文章。 深入剖析 HarmonyOS ArkUI 声明式开发&#xff1a;状态管理艺术与最佳实践 引言 随着 HarmonyOS 4、5 的广泛应用以及面向未来的 HarmonyOS NEXT&#xff08;API 12&#xff09;的发布&…

Qwen-Code安装教程

一、概述Qwen Code 是一个强大的基于命令行、面向开发者的 AI 工作流工具&#xff0c;改编自 Gemini CLI&#xff0c;专门针对 Qwen3-Coder 模型进行了优化。它专门为代码理解、代码重构、自动化工作流、Git 操作等场景设计&#xff0c;让你的开发工作变得更高效、更智能。它既…

老师傅一分钟精准判断电池好坏!就靠这个神器!

在汽车维修与保养领域&#xff0c;蓄电池状态的准确判断一直是技术人员面临的重要挑战。传统的电压测量方法只能反映表面现象&#xff0c;无法深入评估蓄电池的实际健康状态。Midtronics MDX-P300蓄电池及电气系统测试仪作为专业级诊断设备&#xff0c;通过电导测试技术和多系统…

Axure笔记

Axure介绍 快速原型的软件 应用场景&#xff1a;拉投资、给项目团队、销售演示、项目投标、内部收集反馈、教学 软件安装与汉化 汉化&#xff1a;复制lang文件夹和三个dll 软件的基础功能 基本布局&#xff1a;菜单栏、工具栏、页面和摘要、元件和母版、画布、样式交互和说明设…

Pytorch Yolov11 OBB 旋转框检测+window部署+推理封装 留贴记录

Pytorch Yolov11 OBB 旋转框检测window部署推理封装 留贴记录 上一章写了下【Pytorch Yolov11目标检测window部署推理封装 留贴记录】&#xff0c;这一章开一下YOLOV11 OBB旋转框检测相关的全流程&#xff0c;有些和上一章重复的地方我会简写&#xff0c;要两篇结合着看&#x…

《Keil 开发避坑指南:STM32 头文件加载异常与 RTE 配置问题全解决》

《Keil 开发避坑指南&#xff1a;STM32 头文件加载异常与 RTE 配置问题全解决》文章提纲一、引言• 简述 Keil 在 STM32 开发中的核心地位&#xff0c;指出头文件加载和 RTE&#xff08;运行时环境&#xff09;配置是新手常遇且关键的问题&#xff0c;说明本文旨在为开发者提…

TortoiseGit 2.4.0.0 64位安装教程(附详细步骤和Git配置 附安装包)

本教程详细讲解 ​TortoiseGit 2.4.0.0 64位版本​ 的完整安装步骤&#xff0c;包括如何运行 ​TortoiseGit-2.4.0.0-64bit.msi​ 安装包、设置安装路径、关联 Git 环境&#xff0c;以及安装后的基本配置方法&#xff0c;适合 Windows 用户快速上手 Git 图形化管理工具。 一、…