c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection.

一、背景

项目例行巡检的时候,发现服务器一直咔咔的提示警告,但是业务有并未反馈系统存在问题。警告虽不比报错来的炸裂,但是也是不容忽视的。

具体报错信息如下:
在这里插入图片描述

2023-11-24 02:05:00.002  WARN 7918 --- [schedulerFactoryBean_*****] c.a.druid.pool.DruidAbstractDataSource   : discard long time none received connection. , jdbcUrl : jdbc:mysql://这里链接了数据库哈?characterEncoding=utf8&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true, version : 1.2.4, lastPacketReceivedIdleMillis : 239904

说实话,这玩意还真没见过。
本着不会就问的态度,搜了资料,整理了一下大概的解决方式。

二、处理问题

2.1 调整版本
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.4</version>
</dependency>

额,可以试一试,但是不一定有用吧

2.2 增加配置
@PostConstruct
public void init(){
    // 处理 discard long time none received connection
    System.setProperty("druid.mysql.usePingMethod", "false");
}

或者启动类中增加

Properties properties = System.getProperties();
properties.setProperty("druid.mysql.usePingMethod", "false");
SpringApplication.run(App.class, args)

额,应该可以,但我没试。
因为要改代码,需要发布,比较麻烦,不过应该可以实现。

2.3 修改启动命令(推荐)

不需要改代码,就能解决问题,多好。
增加配置:-Ddruid.mysql.usePingMethod=false
原启动命令:

nohup java -jar -Djasypt.encryptor.password='配置文件秘钥' -Dspring.config.location=/app/application.yml /app/test.jar >>/app/test.log 2>&1  &

修改后启动命令:

nohup java -jar -Djasypt.encryptor.password='配置文件秘钥' -Ddruid.mysql.usePingMethod=false -Dspring.config.location=/app/application.yml /app/test.jar >>/app/test.log 2>&1  &

整个就是一个字:嘎嘎好用

2.4 原因

这个就需要耗时间去研究了。
引用参考链接1的大佬的描述:
因为我们开启了testOnBorrow 开关,所以数据库连接会在申请成功后,立即进行一次测试,然后根据数据库连接的最后一次心跳时间,判断是否闲置过长要丢弃掉该数据库连接。
该开关主要在从连接池获取时立即检查连接的有效性。
而不开启testOnBorrow则会在保持连接过程中不断检查连接的闲置情况,对闲置过长的连接回收。
com.alibaba.druid.util.MySqlUtils#getLastPacketReceivedTimeMs 这个方法会返回连接最后一次收到消息的时间。

感觉类似于在Maven打包的过程中,那个test的作用。

启动命令中的 配置文件秘钥 可参考:SpringBoot集成jasypt,加密yml配置文件

参考链接:
1、https://blog.csdn.net/weixin_46080554/article/details/129878573
2、https://www.cnblogs.com/shenjianjun/p/14717369.html
3、https://blog.csdn.net/Mou_O/article/details/128703853

你可能感兴趣的:(java,c语言,开发语言,java)