java.sql.SQLException: validateConnection false 解决方法记录

在配置文件中引入Druid依赖后,尝试连接MySQL和Oracle数据库成功,但连接SQLServer时出现错误。问题源于Druid与SQLServer驱动的不兼容。解决方案包括在配置中添加特定的validation-query和调整test-on-borrow属性,或者动态设置Druid配置。最终通过将Druid版本从1.2.8降低到1.2.5成功解决问题。此外,还提供了其他解决思路,如更换Druid或SQLServer驱动版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本依赖

更改配置文件时,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

其他参考

druid1.2.6连接sqlserver时出现错误: validateConnection false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掘金者说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值