当前位置: 首页 > news >正文

解决Spring Boot中Druid连接池“discard long time none received connection“警告

在使用Spring Boot结合Druid连接池时,开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影响应用程序的正常运行,但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因,并提供几种解决方法。

问题现象

在使用Druid连接池的新版本(如1.2.5)时,控制台可能会时不时打印以下警告:

WARN  com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : [your-jdbc-url]

这表明Druid连接池检测到某些数据库连接已经超过了一定时间没有活动,因此被标记为长时间空闲并被丢弃。

产生原因

经过查看Druid的源码,发现这个问题的根源在于Druid连接池对MySQL连接的处理逻辑。在DruidAbstractDataSource类的testConnectionInternal方法中,如果连接空闲时间超过60秒,Druid会认为该连接已经不再有效,并将其丢弃。

if (valid && isMySql) {long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);if (lastPacketReceivedTimeMs > 0 && mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {discardConnection(holder);LOG.warn("discard long time none received connection. " +", jdbcUrl : " + jdbcUrl + ", version : " + VERSION.getVersionNumber() +", lastPacketReceivedIdleMillis : " + mysqlIdleMillis);return false;}
}

解决办法

1. 修改Druid配置

一种解决方法是修改Druid的配置,通过设置druid.mysql.usePingMethod=false来避免使用MySQL的Ping方法来检查连接有效性。这可以通过以下两种方式实现:

  • 运行时配置:在运行参数中增加-Ddruid.mysql.usePingMethod=false
  • Spring配置:在Spring的配置文件中添加:
spring:datasource:druid:mysql:usePingMethod: false

2. 调整数据库配置

另一种方法是调整数据库的配置,例如MySQL的wait_timeout参数,以增加数据库端的空闲超时时间,从而减少因为数据库端关闭连接而导致Druid报错的情况。

3. 代码层面的优化

最后,确保应用程序在使用数据库连接时,能够及时释放资源,避免不必要的连接泄露。

结语

虽然"discard long time none received connection"的警告可能不会直接影响应用程序的运行,但解决这个问题可以提高应用程序的稳定性,并减少不必要的资源浪费。希望本文提供的方法能够帮助你解决这个问题。


http://www.mrgr.cn/news/15229.html

相关文章:

  • python发送电子邮件:SMTP服务器配置步骤?
  • 本地缓存Caffeine框架的学习笔记
  • 二叉搜索树(c++)
  • Oracle使用手册
  • 【大模型从入门到精通46】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流3
  • 升降梯人数统计识别摄像机
  • hive-去字符串前导0
  • jQuery基础——事件
  • 【drools】kie:官方仓库clone 遇到问题解决
  • Bytebase 2.22.2 - 允许在工作空间为群组分配角色
  • Python深浅拷贝
  • 手算神经网络MAC和FLOP
  • 在 macOS 的 VMware Fusion 上为 Ubuntu 虚拟机设置稳定的静态 IP 地址
  • Java爬虫
  • 关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)
  • 2024年8月29日(harbor似有仓库管理,Docker-compose容器编排)
  • 【Docker】docker的简介与部署方法
  • 2022 年高教社杯全国大学生数学建模竞赛-C 题 古代玻璃制品的成分分析与鉴别详解+分类模型Python代码源码
  • SpringBoot 的注解原理,及自定义注解
  • 【自己电脑打开不了产品发的AXURE,HTML需求原型直接简单解决方式】