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

本文主要是介绍解决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"的警告可能不会直接影响应用程序的运行,但解决这个问题可以提高应用程序的稳定性,并减少不必要的资源浪费。希望本文提供的方法能够帮助你解决这个问题。

这篇关于解决Spring Boot中Druid连接池“discard long time none received connection“警告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110987

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构