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

devtools/2025/1/19 21:02:59/

在使用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.ppmy.cn/devtools/151913.html

相关文章

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 : 选择类型 1: 将当前的工程打包成IP 2: 将当前的BD工程打包成IP 3: 将指定的源码打包成IP 4: 创建一个新的AXI 接口IP 其中3和4是比较常用的,本次…

C++通透讲解设计模式:依赖倒转(1)

依赖倒转 这是我认为的SOLID里面最重要的一个原则,当你掌握这种设计方式之后,会让别人在调用你的代码时爽很多。 在C20设计模式这本书中,依赖倒转写的很抽象。我这里将他的概念列出: 高层模块不应该依赖底层模块,它…

HNU人工智能课程总结与反思

HNU人工智能这门课教材用的是101计划的《人工智能引论》,浙江大学吴飞教授编的。个人认为,教材写的挺好,但是把人工智能这一领域的东西放在一本书里,用32个课时讲完还是太过于仓促。不过,对于我这个上课之前对人工智能…

Bootstrap 下拉菜单

Bootstrap 下拉菜单 Bootstrap 是一个流行的前端框架,它提供了许多预构建的组件,其中之一就是下拉菜单。下拉菜单是一个交互式元素,允许用户从一系列选项中选择一个。在本篇文章中,我们将详细介绍如何在 Bootstrap 中创建和使用下…

【protobuf】Windows与Linux下的安装详解

文章目录 一、Windows下的安装二、Linux下的安装1. 下载protobuf2. 安装protobuf 一、Windows下的安装 ​ 编译器下载地址:https://github.com/protocolbuffers/protobuf/releases ​ 下载之后将压缩包解压到本地目录下。解压后的文件内包含 bin、include 文件&a…

IDEA运行测试函数@Test注解旁边没有运行按钮

如图我想直接运行 testSaveShop 函数进行测试,但是旁边没有运行按钮。 解决办法:测试类需要加上public,系统才能识别到并调用运行。 位置如下,在类和方法都加上 public ,然后就会出现运行按钮: 但是如果点…

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…

算法日记4:796. 子矩阵的和(二维前缀和)

题目链接:Acwing796. 子矩阵的和 一、题目 二、解题思路: 让我们来分解问题 2.1法一:暴力0(n2) 首先对于这个题目,我们最先想到的是暴力解法即两层for循环即可实现程序,但是此时我们的程序就过于复杂,因…