JDBC连接SQL Server 2022出现Connection reset报错如何排查解决
SQL Server 连接报 Connection reset 问题修复方案
已定位的配置冲突
- pom.xml 中 Java 版本配置与实际运行环境不匹配:当前运行环境为 JDK 17,但 pom 内
<java.version>配置为1.8,会导致 Maven 编译、依赖适配阶段出现字节码版本兼容问题,触发连接阶段底层 Socket 重置。 - 驱动与TLS协议适配缺陷:当前使用的
mssql-jdbc 10.2.1.jre17版本对接 SQL Server 2022 时,默认启用的TLS 1.3加密握手会和Windows环境下SQL Server默认的TLS配置冲突,握手阶段直接被服务端重置连接,是该报错的最高频诱因。 - 命名实例连接未明确端口:连接串使用
LAPTOP-BHJGHRUA\SQL2022命名实例写法但未指定TCP端口,若SQL Server Browser服务未正常运行,客户端会解析到错误端口发起连接,直接被目标端重置。
分步修复操作
- 修正pom.xml版本配置
将properties节点下的Java版本调整为和实际运行环境一致的17,修改后在IDEA中右键pom.xml选择Maven -> Reload project 重载依赖:
<properties> <java.version>17</java.version> </properties>
- 调整JDBC连接串参数
在连接串中强制指定兼容的TLS版本,补充端口配置(若后续1433端口连接失败,可到SQL Server配置管理器中查看对应实例的TCP动态端口替换即可):
String connectionUrl = "jdbc:sqlserver://LAPTOP-BHJGHRUA\\SQL2022:1433;" + "database=customer;" + "user=username;" + "password=123;" + "encrypt=true;" + "trustServerCertificate=true;" + "sslProtocol=TLSv1.2;" + "loginTimeout=30;";
- 本地服务与协议校验
- 打开系统服务面板,确认
SQL Server (SQL2022)、SQL Server Browser两个服务处于运行状态 - 打开SQL Server配置管理器,找到SQL2022实例对应的TCP/IP协议,确认状态为已启用,修改协议配置后需要重启SQL Server服务生效。
- 驱动版本兼容兜底
如果以上操作完成后仍报错,将mssql-jdbc驱动升级到对JDK17、SQL Server 2022适配更完善的12.4.0.jre17版本,替换pom中原有依赖即可:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>12.4.0.jre17</version> </dependency>
所有配置修改完成后,终止之前的运行进程,重新执行connection类的main方法即可验证连接,正常情况下控制台会打印connected。
内容的提问来源于stack exchange,提问作者sunShine
相关产品推荐
相关产品推荐

