记一次:cloud集成Druid出现异常报错的原因及解决

问题一:

在项目中集成druid项目中,发现错误日志中频繁的出现如下错误信息:

08:01:59.035 [http-nio-9201-exec-4] WARN c.a.d.p.DruidAbstractDataSource - [testConnectionInternal,1494] - discard long time none received connection.,jdbcUrl : jdbc:MysqL://xxxx:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8,version : 1.2.8,lastPacketReceivedIdleMillis : 3506735

这类的错误。虽然是警告没有影响业务。但看着实在难受。

分析:经过排查发现是druid版本导致的异常,这里用的是

<druid.version>1.2.8</druid.version>

在1.2.2及以前版本并未出现如此异常。而在其以上版本均存在此问题,下面就来分析一下异常原因及解决方案。

在源码中会找到这么一段代码

public void configfromproperties(properties properties) {
    string property = properties.getproperty("druid.MysqL.usepingmethod");
    if ("true".equals(property)) {
        setusepingmethod(true);
    } else if ("false".equals(property)) {
        setusepingmethod(false);
    }
}

可以看到获取配置文件 druid.MysqL.usepingmethod这个属性,为true还是为false进行输出的。那么我们可以在启动时进行配置。

解决一:在启动程序时在运行参数中增加:-ddruid.MysqL.usepingmethod=false。

解决二:boot启动类初始化代码块进行设置

解决三:配置类中进行设置为false

因为我这里用的是nacos,所以以上我均可以不采用,直接使用nacos配置如下

dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenevictionRunsMillis: 60000
        minevictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        MysqL: 
          usePingMethod: false
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,slf4j
        connectionProperties: druid.stat.mergesql\=true;druid.stat.slowsqlMillis\=5000

添加上 MysqL: usePingMethod: false 

再次启动可以解决

------------------------------------------------------------------------------------------------------------

相关文章

优化MySQL数据库发布系统存储的方法有:1.mysql库主从读写分...
使用mysql的方法:在“我的电脑”→右键→“管理”→“服务”...
在mysql中查看root用户权限的方法:1.命令行启动mysql服务;...
MySQL主从复制是用来备份一个与主数据库一样环境的从数据库,...
运行mysql的方法1.启动mysql服务,在“我的电脑”→右键→“...
开启mysql的方法1.可以通过快捷键win+r,输入cmd,打开窗口,...