springboot连接数据库报错testWhileIdle is true, validationQuery not set

问题描述:

  使用springboot连接数据库,启动的时候报错:testWhileIdle is true, validationQuery not set。但是不影响系统使用,数据库等一切访问正常。

  application.properties数据源配置如下:

  spring.datasource.username=root
  spring.datasource.password=
  spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
  spring.datasource.initial-size=1
  spring.datasource.maximum-pool-size=10
  spring.datasource.connection-timeout=5000

问题分析:

  查了这句话的意思:空闲的时候进行检测是开启的,但是检测的查询语句没有设置。大致意思就是说,当数据库没有接收到请求时,会进行数据库连接检测,检查数据库是否还是连着的。检查数据库是否断开需要发送sql语句。报错是说这个sql语句没有设置。

  那么解决思路有两个:

    1、设置不进行空闲时连接检测。

    2、开启空闲时连接检测,并设置检测用的sql语句。

  先查了资料,说testWhileIdle默认是false的,这是竟然是true,整个代码搜索了一下,也没有见到设置testWhileIdle的地方,推测应该是版本不一样,新版本jar包里面默认设置为true。

  好吧,先不管这些,既然都是数据库的设置,那么应该可以在配置数据源的时候加上这些配置,网上搜索了配置的写法,如下:

  spring.datasource.test-while-idle=true
  spring.datasource.validation-query=SELECT 1

  但是发现还是不起作用,仍然报错。

  有些不可理解,同样是数据源的配置,为什么上面的连接url、用户名、密码可以生效,下面的就不生效呢?

  再次搜索答案,发现有介绍了:

  springboot1.4取消spring.datasource.type

  在新版本中,validationQuery没有自动注入,那么就需要手动声明datasource bean。至于怎么写,可以看上面的文章。

  主要是手动注入DruidDataSource,声明一个配置类,数据源各个值都注入进去,返回DruidDataSource。

  再启动,系统不报错了!

  最后查看了DruidDataSource源代码,

  public static final String DEFAULT_VALIDATION_QUERY = null;

  果然,DruidDataSource默认testWhileIdle=true,并且validationQuery设置为空。

总结:

  1、首先要理解错误,明白错误的意思。

  2、从错误出发,分析导致错误的原因,针对这些能找到哪些解决方法。

  3、再搜索资料,网上的资料都太乱了,版本不一致、环境不一样等有很多影响因素,需要一一进行实验。

  4、看源代码也是很不错的解决问题办法。

原文地址:https://www.cnblogs.com/yangtze-yufei/p/9593636.html

时间: 2024-11-02 18:58:32

springboot连接数据库报错testWhileIdle is true, validationQuery not set的相关文章

canal部署启动的时候报错com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set

报错信息:com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set 解决方法: 找到conf/canal.properties 文件里面的 canal.instance.tsdb.spring.xml=classpath:spring/tsdb/h2-tsdb.xml 信息,给注释掉 原文地址:https://www.cnblogs.com/houzs/p/10329384.ht

oracle连接数据库报错:ORA-01034: ORACLE not available(Oracle 不存在),ORA-27101: shared memory realm does not exist

花一天半的时间解决客户端连接服务端的oracle数据库,无法连接问题.ORA-01034: ORACLE not available(Oracle 不存在),ORA-27101: shared memory realm does not   exist 分析:前几天还可以连接数据库,但是昨天开始,本地无缘无故的不能连接服务端数据库.网上很多人说造成这个问题的原因是异常关机 ,数据库没有在关机之前关闭.我公司人说在前几天确实有人重启过电脑,就当是这个原因吧,有时间一定要把真正原因找出来. 下面主要

springboot启动报错:"Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled."

报错内容 java.lang.Object.wait(Native Method)java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:41)2019-02-14 14:58:00.326 INFO 17688 --- [ main] Condition

python3 与 Django 连接数据库报错:ImportError: No module named 'MySQLdb'

在 python2 中,使用 pip install mysql-python 进行安装连接MySQL的库,使用时 import MySQLdb 进行使用 在 python3 中,改变了连接库,改为了 pymysql 库,使用pip install pymysql 进行安装,直接导入即可使用 但是在 Django 中, 连接数据库时使用的是 MySQLdb 库,这在与 python3 的合作中就会报以下错误了: ImportError: No module named 'MySQLdb' 解决方

springboot启动报错退出,To display the conditions report re-run your application with 'debug' enabled.

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2019-01-19 12:01:39.870 ERROR 8324 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : ***************************APPLICATIO

sqlplus连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0解决

sqlplus连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0解决 sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0 问题描述: 使用sqlplus客户端登录数据库,报错SP2-0642,而使用其它方式plsql或者tnsnames等方式连接数据库均没有问题 [plain] [[email protected] ~

springboot启动报错start bean 'eurekaAutoServiceRegistration' NullPointerException

解决方案参考:https://blog.csdn.net/hhj13978064496/article/details/82825365 我将eureka的依赖包放到了依赖包的最下面,启动报错, 如下: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId&

TP连接数据库报错:SQLSTATE[HY000] [2002] No such file or directory

连接数据库报错:“SQLSTATE[HY000] [2002] No such file or directory”. 出现这个问题的原因是PDO无法找到mysql.sock或者mysqld.sock.  解决方法1:找到相应的.sock文件,并设置php.ini文件中的pdo_mysql.default_socket的值为.sock文件的路径. pdo_mysql.default_socket= /tmp/mysqld.sock 然后重启Apache,或者nginx下重启php-fpm即可.

运行springboot项目报错:Field userMapper in XX required a bean of type &#39;xx&#39; that could not be found.

运行springboot项目报错: *************************** APPLICATION FAILED TO START *************************** Description: Field userMapper in com.whohim.springboot.service.impl.UserServiceImpl required a bean of type 'com.whohim.springboot.dao.UserMapper' t