springboot连接数据库报错testWhileIdleistrue,validati。。。问题描述:
  使⽤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
  tion-timeout=5000
问题分析:
  查了这句话的意思:空闲的时候进⾏检测是开启的,但是检测的查询语句没有设置。⼤致意思就是说,当数据库没有接收到请求时,会进⾏数据库连接检测,检查数据库是否还是连着的。检查数据库是否断开需要发送sql语句。报错是说这个sql语句没有设置。
  那么解决思路有两个:
    1、设置不进⾏空闲时连接检测。
    2、开启空闲时连接检测,并设置检测⽤的sql语句。
  先查了资料,说testWhileIdle默认是false的,这是竟然是true,整个代码搜索了⼀下,也没有见到设置testWhileIdle的地⽅,推测应该是版本不⼀样,新版本jar包⾥⾯默认设置为true。
  好吧,先不管这些,既然都是数据库的设置,那么应该可以在配置数据源的时候加上这些配置,⽹上搜索了配置的写法,如下:
  st-while-idle=true
  spring.datasource.validation-query=SELECT 1
  但是发现还是不起作⽤,仍然报错。
  有些不可理解,同样是数据源的配置,为什么上⾯的连接url、⽤户名、密码可以⽣效,下⾯的就不⽣效呢?
  再次搜索答案,发现有介绍了:
  在新版本中,validationQuery没有⾃动注⼊,那么就需要⼿动声明datasource bean。⾄于怎么写,可以看上⾯的⽂章。
  主要是⼿动注⼊DruidDataSource,声明⼀个配置类,数据源各个值都注⼊进去,返回DruidDataSource。
  再启动,系统不报错了!spring boot选择题
  最后查看了DruidDataSource源代码,
  public static final String DEFAULT_VALIDATION_QUERY = null;
  果然,DruidDataSource默认testWhileIdle=true,并且validationQuery设置为空。
总结:
  1、⾸先要理解错误,明⽩错误的意思。
  2、从错误出发,分析导致错误的原因,针对这些能到哪些解决⽅法。
  3、再搜索资料,⽹上的资料都太乱了,版本不⼀致、环境不⼀样等有很多影响因素,需要⼀⼀进⾏实验。
  4、看源代码也是很不错的解决问题办法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。