ToB企服应用市场:ToB评测及商务社交产业平台

标题: 办理Spring Boot中Druid毗连池“discard long time none received connecti [打印本页]

作者: 王國慶    时间: 2025-1-19 21:10
标题: 办理Spring Boot中Druid毗连池“discard long time none received connecti
在使用Spring Boot结合Druid毗连池时,开辟者可能会遇到"discard long time none received connection"的警告信息。固然这通常不会影响应用程序的正常运行,但这些警告信息可能会让人感到困扰。本文将探究这个标题的原因,并提供几种办理方法。
标题征象

在使用Druid毗连池的新版本(如1.2.5)时,控制台可能会时不时打印以下警告:
  1. WARN  com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : [your-jdbc-url]
复制代码
这表明Druid毗连池检测到某些数据库毗连已经超过了肯定时间没有活动,因此被标记为长时间空闲并被丢弃。
产生原因

颠末查看Druid的源码,发现这个标题的根源在于Druid毗连池对MySQL毗连的处置惩罚逻辑。在DruidAbstractDataSource类的testConnectionInternal方法中,如果毗连空闲时间超过60秒,Druid会认为该毗连已经不再有用,并将其丢弃。
  1. if (valid && isMySql) {
  2.     long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);
  3.     if (lastPacketReceivedTimeMs > 0 &&
  4.         mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
  5.         discardConnection(holder);
  6.         LOG.warn("discard long time none received connection. " +
  7.                  ", jdbcUrl : " + jdbcUrl + ", version : " + VERSION.getVersionNumber() +
  8.                  ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis);
  9.         return false;
  10.     }
  11. }
复制代码
办理办法

1. 修改Druid配置

一种办理方法是修改Druid的配置,通过设置druid.mysql.usePingMethod=false来制止使用MySQL的Ping方法来检查毗连有用性。这可以通过以下两种方式实现:

2. 调解数据库配置

另一种方法是调解数据库的配置,例如MySQL的wait_timeout参数,以增长数据库端的空闲超时时间,从而减少由于数据库端关闭毗连而导致Druid报错的情况。
3. 代码层面的优化

末了,确保应用程序在使用数据库毗连时,能够实时开释资源,制止不须要的毗连泄露。
结语

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4