SpringBoot集成Druid启动报错testWhileIdle is true, validationQuery not set
项目场景:
新上的达梦数据库,信创项目。
问题描述
提示:达梦数据库通信异常
达梦数据库偶发出现通信异常问题,数据库连接池也有配置线程有效性监控,但是发现在yaml中的配置test-while-idle: true生效了,但是validation-query: SELECT 'x’不生效。导致在信创项目上若长期有的模块连接池没有请求被达梦数据库kill掉了。
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:url: jdbc:mysql://192.168.1.11:3306/wetrol?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: 11111driver-class-name: com.mysql.cj.jdbc.Driverinitial-size: 10max-active: 100min-idle: 10max-wait: 60000validation-query: SELECT 'x'test-while-idle: truetest-on-borrow: falsetest-on-return: false# 其他配置...
原因分析:
yaml中的配置test-while-idle: true生效了,但是validation-query: SELECT 'x’不生效。导致在信创项目上若长期有的模块连接池没有请求被达梦数据库kill掉了。
应该是druid版本问题,感兴趣的同学深究一下!
解决方案:
手动写到Java代码中解决
public DataSource dataSource() {DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setTestWhileIdle(true);druidDataSource.setValidationQuery("SELECT 1");druidDataSource.setKeepAliveBetweenTimeMillis(60000);return druidDataSource;}