springboot sqlserver druid 报错:validateConnection false
·
异常信息如下:
java.sql.SQLException: validateConnection false
at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1418)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1733)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801)
Caused by: java.lang.NullPointerException: null
at com.alibaba.druid.wall.WallProvider.checkInternal(WallProvider.java:707)
at com.alibaba.druid.wall.WallProvider.check(WallProvider.java:584)
at com.alibaba.druid.wall.WallFilter.checkInternal(WallFilter.java:826)
at com.alibaba.druid.wall.WallFilter.check(WallFilter.java:821)
at com.alibaba.druid.wall.WallFilter.statement_execute(WallFilter.java:454)
at com.alibaba.druid.filter.FilterChainImpl.statement_execute(FilterChainImpl.java:3008)
at com.alibaba.druid.filter.FilterAdapter.statement_execute(FilterAdapter.java:2484)
at com.alibaba.druid.filter.FilterEventAdapter.statement_execute(FilterEventAdapter.java:188)
at com.alibaba.druid.filter.FilterChainImpl.statement_execute(FilterChainImpl.java:3008)
at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.execute(StatementProxyImpl.java:147)
at com.alibaba.druid.pool.vendor.MSSQLValidConnectionChecker.isValidConnection(MSSQLValidConnectionChecker.java:50)
at com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection(DruidAbstractDataSource.java:1398)
跟进去这个方法:com.alibaba.druid.pool.DruidAbstractDataSource.validateConnection
result = validConnectionChecker.isValidConnection(conn, validationQuery, validationQueryTimeout);
发现是这行代码报的异常,进入这个方法

找到这个实现类的方法(因为是sqlserver)
public boolean isValidConnection(final Connection c, String validateQuery, int validationQueryTimeout) throws Exception {
if (c.isClosed()) {
return false;
}
Statement stmt = null;
try {
stmt = c.createStatement();
if (validationQueryTimeout > 0) {
stmt.setQueryTimeout(validationQueryTimeout);
}
stmt.execute(validateQuery);
return true;
} catch (SQLException e) {
throw e;
} finally {
JdbcUtils.close(stmt);
}
}
最终发现方法参数validateQuery是null,所以报了空指针,那我们回去看为什么是null
protected volatile String validationQuery = DEFAULT_VALIDATION_QUERY;
类定义了validationQuery等于DEFAULT_VALIDATION_QUERY,而DEFAULT_VALIDATION_QUERY初始化定义为null,其实这个参数来源与springboot配置文件
在springboot数据源配置文件新增下面这个配置:
druid:
validation-query: SELECT 1
就可以啦!
PS,数据源配置:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://IP:PORT;DatabaseName=库名
username: 数据库用户名
password: 密码
druid:
validation-query: SELECT 1
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)