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、看源代码也是很不错的解决问题办法。
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 解决方法: 找 ...
- springboot 启动报错"No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available"
1.问题 springboot启动报错 "D:\Program Files\Java\jdk-11\bin\java.exe" -XX:TieredStopAtLevel=1 -n ...
- spring boot中连接数据库报错500(mybatis)
spring boot中连接数据库报错500(mybatis) pom.xml中的依赖 <!-- 集成mybatis--> <dependency> <groupId&g ...
- SpringBoot启动报错:ould not be registered. A bean with that name has already been defined in file and overriding is disabled.
SpringBoot启动报错 ***************************APPLICATION FAILED TO START*************************** Des ...
- 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客户端登录数据库,报 ...
- TP连接数据库报错:SQLSTATE[HY000] [2002] No such file or directory
连接数据库报错:“SQLSTATE[HY000] [2002] No such file or directory”. 出现这个问题的原因是PDO无法找到mysql.sock或者mysqld.soc ...
- Javassm连接数据库报错129 ERROR [com.alibaba.druid.pool.DruidDataSource] - {dataSource-1} init error
Javassm连接数据库报错129 ERROR [com.alibaba.druid.pool.DruidDataSource] - {dataSource-1} init error 发现jdbc这 ...
- 运行springboot项目报错:Field userMapper in XX required a bean of type 'xx' that could not be found.
运行springboot项目报错: *************************** APPLICATION FAILED TO START ************************** ...
- ArcCatalog连接数据库报错
ArcCatalog连接数据库报错: Failed to connect to database. Cannot connect to database because the database cl ...
随机推荐
- 【Dojo 1.x】笔记1 入门
Dojo是个框架 ,是个js框架,现在除了这一点什么都不知道,就这么上手了. ps:不建议Web初学者看我的笔记,这个要有一定积累才能看. 在<body>标签内写这么一点代码: <b ...
- iOS----------The Apple Developer Program License Agreement has been updated.
The Apple Developer Program License Agreement has been updated. In order to access certain membershi ...
- 加载loading对话框的功能(不退出沉浸式效果)
上一篇基于修改系统源码的前提下,实现了完全的沉浸式体验效果.可参考这篇 戳这 一.自定义Dialog 在沉浸式效果下,当界面弹出对话框时,对话框将获取到焦点,这将导致界面退出沉浸式效果,那么是不是能通 ...
- [20190415]10g下那些latch是共享的.txt
[20190415]10g下那些latch是共享的.txt http://andreynikolaev.wordpress.com/2010/11/23/shared-latches-by-oracl ...
- JAVA 递归实现从n个数中选取m个数的所有组合
这周Java课程有个小作业:Java递归实现从n个数中选取m个数的所有组合 代码如下: //其中 n 取 1,2,3,4,5 五个数, m 取 3 package javaText; public c ...
- jQuery中toggle与slideToggle以及fadeToggle之间的不同
toggle()方法: 定义和用法 切换元素的可见状态.如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法: $(selector).toggle(speed,callback ...
- Python基础之面对对象进阶
阅读目录 isinstance和issubclass 反射 setattr delattr getattr hasattr __str__和__repr__ __del__ item系列 __geti ...
- Windows 版 SourceTree 免登录跳过初始设置的方法
首先去官网下载最新的sourcetree安装包,点击打开下载地址. 下载完成后安装,等到他自启动开始提示你登录的时候,打开“我的电脑(此电脑)”,在最上边的输入栏输入%LocalAppData%\At ...
- github使用个人总结
1.获取github上面的源码时候,不能获取最新的,因为你的开发工作不一定是最新的要下载历史版本. 2.要使用里面的文件的时候,可以在目录后面url后面添加downloads 这样可以找到封装好的版本 ...
- Hystrix是个什么玩意儿
1. 什么是Hystrix Hystrix是Netflix的一个开源框架,地址如下:https://github.com/Netflix/Hystrix 中文名为“豪猪”,即平时很温顺,在感受到危险的 ...