druid discard long time none received connection解决办法

druid discard long time none received connection解决办法

Laughing
2025-06-06 / 0 评论 / 3 阅读 / 搜一下 / 正在检测是否收录...

Spring Boot集成阿里巴巴druid时,如果你使用的是MySQL数据库,可能会在控制台不定时的输出以下警告信息

mbk4bdbj.png

虽然这个警告信息不会影响程序的正常运行,但是这种日志不仅会让人感到疑惑,心理上也会比较难受。网上出现这种问题的很多,也有很多人提供了类似修改环境变量的方式进行屏蔽,但是经过我实测,都没有解决问题,即使设置了系统属性值,还是会出现。

问题分析

通过日志,我们可以看到,警告信息是c.a.druid.pool.DruidAbstractDataSource这个类打印的,我们可以打开对应jar包的位置具体查看一下打印日志的方法

mbk4hj9n.png

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

解决办法

这里主要介绍两种处理方式,方法一是升级版本,升级到一个不打印警告的版本即可,第二方法可以通过druid.mysql.usePingMethod系统属性禁用掉ping检测。

方法一、升级版本

具体哪个版本去掉的提示我没细查,我这里是升级到了1.2.23版本,可以确认这个版本不会打印这条警告信息,低于或者高于此版本都可能会再次打印这条警告信息。

mbk85u36.png

方法二、设置系统属性

通过设置druid.mysql.usePingMethod=false来避免使用MySQL的Ping方法来检查连接有效性。我是通过在启动类main方法设置的

public static void main(String[] args) {
        System.setProperty("druid.mysql.usePingMethod", "false");//去掉discard long time none received connection提示
        SpringApplication.run(LeeFrameApplication.class, args);

        System.out.println("启动成功");
    }

0

评论 (0)

取消