SQL Server JDBC驱动程序无法快速检测丢失的连接

时间:2016-12-07 15:27:33

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

我使用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分钟
  4. 另一个可能的选项 - Connection.setNetworkTimeout()但SQL Server驱动程序没有实现它。我也无法访问JDBC驱动程序使用的套接字来设置TCP Keepalive。

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

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

1 个答案:

答案 0 :(得分:0)

Microsoft MSSQL-JDBC现已开源。最近,MSSQL-JDBC团队实施了sockettimeout& querytimeout秒。这肯定会解决您的问题。