版本依赖
更改配置文件时,mysql、oracle成功连接,sqlserver提示错误
<!-- 引入druid依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
发现问题
Druid 与 sqlserver 驱动不兼容
2022-04-19 02:03:10,777 111- ERROR [Druid-ConnectionPool-Create-1302277081] [com.alibaba.druid.pool.DruidDataSource] - create connection SQLException, url: jdbc:sqlserver://IP:PORT;DatabaseName=XXX;, errorCode 0, state null pos=DruidDataSource.java:2840
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:2838)
Caused by: java.lang.NullPointerException: null
解决方案(动态)
DataSourceProperty dataSourceProperty = new DataSourceProperty();
dataSourceProperty.setUrl(url);
dataSourceProperty.setUsername(userName);
dataSourceProperty.setPassword(passWord);
dataSourceProperty.setDriverClassName(driverClass.getValue());
if (driverClass.equals(DriverClassEnum.SqlServer)) {
DruidConfig dc = new DruidConfig();
dc.setValidationQuery("select 'x' ");
dataSourceProperty.setDruid(dc);
}
DataSource dataSource = dataSourceCreator.createDataSource(dataSourceProperty);
//dynamicRoutingDataSource.
dynamicRoutingDataSource.addDataSource(dataSourceName, dataSource);
解决方案(配置)
加入以下配置即可解决!
# 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
spring.datasource.druid.validation-query=select 'x'
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
spring.datasource.druid.test-on-borrow=false
druid: https://github.com/alibaba/druid/issues/4277
解决方案(不推荐)
更换druid版本或者sqlserver驱动版本
最后成功方案为:降低druid版本:1.2.8 → 1.2.5