严重: testWhileIdle is true, validationQuery not set 使用Druid连接池报错处理【无Spring框架,使用的JDK9,MYSQL8版本】

  • Post author:
  • Post category:mysql


声明;使用的JDK9, MYSQL8版本数据库,1.0.9Druid的jar包;

使用

druid-1.0.9.jar   ,报错如下;


这两行报错,是因为没有SpringBoot框架xml配置,在不使用框架的情况下;怎么解决呢;

①先解决第一行报错;

严重: testWhileIdle is true, validationQuery not set

原来properties文件配置如下;

driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username = root
password = root

在properties配置文件下添加一些配置;

filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200

再次运行;


报错2;


信息: {dataSource-1} inited

这是日志信息,没有错Druid采用了日志打印机制,这不是报错;

连接池采用了懒加载,真正用到的时候才初始化;


附上一些名词解释;

validationQuery = “SELECT 1”  验证连接是否可用,使用的SQL语句

testWhileIdle = “true”      指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

testOnBorrow = “false”   借出连接时不要测试,否则很影响性能

timeBetweenEvictionRunsMillis = “30000”  每30秒运行一次空闲连接回收器

minEvictableIdleTimeMillis = “1800000”  池中的连接空闲30分钟后被回收,默认值就是30分钟。

numTestsPerEvictionRun=”3″ 在每次空闲连接回收器线程(如果有)运行时检查的连接数量,默认值就是3.

解释:

配置timeBetweenEvictionRunsMillis = “30000”后,每30秒运行一次空闲连接回收器(独立线程)。并每次检查3个连接,如果连接空闲时间超过30分钟就销毁。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接,维护数量不少于minIdle,过行了新老更替。

testWhileIdle = “true” 表示每30秒,取出3条连接,使用validationQuery = “SELECT 1” 中的SQL进行测试 ,测试不成功就销毁连接。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接。

testOnBorrow = “false” 一定要配置,因为它的默认值是true。false表示每次从连接池中取出连接时,不需要执行validationQuery = “SELECT 1” 中的SQL进行测试。若配置为true,对性能有非常大的影响,性能会下降7-10倍。所在一定要配置为false.

每30秒,取出numTestsPerEvictionRun条连接(本例是3,也是默认值),发出”SELECT 1″ SQL语句进行测试 ,测试过的连接不算是“被使用”了,还算是空闲的。连接空闲30分钟后会被销毁



版权声明:本文为weixin_42323802原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。