The exception information is as follows:
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)
Follow this method: com.alibaba.druid.pool.druidabstractdatasource.validateconnection
result = validConnectionChecker.isValidConnection(conn, validationQuery, validationQueryTimeout);
Find the exception of this line of code and enter this method
Find the method of this implementation class (because it is SQL server)
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);
}
}
Finally, it is found that the method parameter validatequery is null, so a null pointer is reported. Let’s go back and see why it is null
protected volatile String validationQuery = DEFAULT_VALIDATION_QUERY;
Class defines that validationquery is equal to default_ VALIDATION_ Query, and default_ VALIDATION_ Query initialization is defined as null. In fact, this parameter comes from the springboot configuration file
Add the following configuration in the springboot data source configuration file:
druid:
validation-query: SELECT 1
Just do it!
PS, data source configuration:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://IP:PORT;DatabaseName=database name
username: username
password: password
druid:
validation-query: SELECT 1