【问题标题】:SQL Server JDBC driver can't detect lost connection quicklySQL Server JDBC 驱动程序无法快速检测到丢失的连接
【发布时间】:2017-04-22 14:57:33
【问题描述】:

我正在使用 JDBC 驱动程序sqlserver-jdbc-4.0.jar 连接到 SQL Server。我创建了一个连接并成功使用它。

然后我关闭了 SQL Server 机器的网络接口。当我运行下一个命令时,我的应用程序一侧的 JDBC 驱动程序需要大约 15 分钟才能了解连接丢失。我尝试了几件事:

  1. 已配置 JDBC 驱动程序属性 LoginTimeout=5, LockTimeout=5, QueryTimeout=5(5 秒)
  2. 调用 Statement.setQueryTimeout() 将超时设置为 5 秒
  3. 调用 Connection.isValid(),超时 5 秒 - 它也卡住了 15 分钟

另一个可能的选项 - Connection.setNetworkTimeout() 但它不是由 SQL Server 驱动程序实现的。我也无法访问 JDBC 驱动程序用来在其上设置 TCP Keepalive 的套接字。

如果我关闭连接然后再次打开它,它会立即明白 SQL Server 实例无法访问。

如何克服我的问题并在几秒钟而不是 15 分钟内检测到丢失的连接?

【问题讨论】:

标签: java sql-server jdbc connection-timeout mssql-jdbc


【解决方案1】:

Microsoft MSSQL-JDBC 现在是开源的。最近 MSSQL-JDBC 团队实现了sockettimeout & querytimeouts。这肯定会解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多