现象

使用数据库操作时出现出现错误,销毁长时间未使用的连接,并显示了无使用的时间ms数。

ERROR 16858 --- [nio-8555-exec-1] c.a.druid.pool.DruidAbstractDataSource   : discard long time none received connection. , jdbcUrl : jdbc:mysql://10.2.55.55:3306/testdb, jdbcUrl : jdbc:mysql://10.2.55.55:3306/testdb, lastPacketReceivedIdleMillis : 99968

 

分析

当程序获取数据库连接,对已存在的数据库连接进行检查,检查到空闲时间过久的连接会进行注销,并报出错误提示。

相关源码

参数

  • testWhileIdle:是否开启获取连接是检查连接是否有效,默认true。
  • timeBetweenEvictionRunsMillis:空闲时间大于检查时间,注销空闲连接超过timeBetweenEvictionRunsMillis的数据库连接,默认60s,设置未负数也会调整未默认值
  • Ddruid.mysql.usePingMethod: 是否是用ping的方式检查数据库连接,超过1秒失败,mysql连接默认开启。设置方式:-Ddruid.mysql.usePingMethod=false,当usePingMethod为false时,会使用“select 1”使用连接进行查询检查连接是否有效,因此不会出现空闲时间。

扩展

  • testOnBorrow:是否开启使用数据库连接时进行sql数据库检查,默认未false,开启对性能有影响,开启后不使用testWhileIdle方式检查。

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐