You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R2DBC-MSSQL连接SQL Server报UnknownHostException如何解决

故障根因

触发java.net.UnknownHostException的核心原因是HOST参数配置错误:R2DBC MSSQL驱动不支持在HOST字段中拼接主机名\实例名格式的SQL Server命名实例地址,驱动会将PC_NAME\SQLEXPRESS整体作为主机名发起DNS解析,自然无法得到有效地址。
你当前配置中已经明确填写了SQLEXPRESS实例对应的TCP端口51306,这种场景下完全不需要在连接参数中传递实例名,实例名仅在通过SQL Server Browser服务动态查询实例端口时才需要单独配置。

修复方案

方案1:直连已知TCP端口(当前场景最优)

直接修改数据库配置中的host字段,删除\SQLEXPRESS后缀即可,修正后的配置如下:

com:
  database:
    host: PC_NAME # 仅填写主机名/IP,禁止拼接实例名
    port: 51306 # 确认该端口为SQLEXPRESS实例实际监听的TCP端口
    database: app_database
    username: user
    password: pass

该方案不依赖SQL Server Browser服务,连接性能更高,只要端口配置正确即可连通,和JDBC中硬编码端口连接的逻辑完全一致。

方案2:通过实例名自动发现端口

如果不希望硬编码实例端口,需要驱动通过SQL Server Browser服务自动查询实例对应端口,需单独配置实例名参数,禁止将实例名拼接在HOST字段中。代码侧新增实例名配置项即可:

val options = builder()
    .option(DRIVER, "sqlserver")
    .option(HOST, properties.host) // host仅填PC_NAME,不带实例名
    .option(USER, properties.username)
    .option(PASSWORD, properties.password)
    .option(DATABASE, properties.database)
    .option(SSL, false)
    .option("instanceName", "SQLEXPRESS") // 单独传入实例名参数
    .build()

使用该方案需要确保SQL Server Browser服务已启动,且服务器防火墙放行了UDP 1434端口,否则驱动无法查询到实例对应的端口信息。

连通性校验项
  • 打开SQL Server配置管理器,确认SQLEXPRESS实例的TCP/IP协议已启用,IPAll配置项中的TCP端口值与配置文件中填写的51306一致;建议手动为命名实例指定固定TCP端口,避免实例重启后动态端口变化导致连接失败
  • 本地调试阶段可将host临时改为127.0.0.1绕开主机名解析环节,先验证端口连通性再调整主机名配置
  • 若使用Windows集成身份验证连接本地实例,需额外引入r2dbc-mssql对应的集成认证依赖,你当前使用SQL账号认证无需额外配置

内容的提问来源于stack exchange,提问作者Alfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:57:21