2016-12-07 134 views
3

我正在使用JDBC驱动程序sqlserver-jdbc-4.0.jar连接到SQL Server。我创建了一个连接并成功使用它。SQL Server JDBC驱动程序无法快速检测到丢失的连接

然后我关闭了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分钟内检测到丢失的连接?

+0

同类问题:http://stackoverflow.com/questions/36553857/how-can-i-enforce-a-query-timeout-for-ms-sql-server-queries-run-via-the-ms- jdbc?rq = 1恐怕结论是:没有选择这个。 –

+0

但是,SQL Server JDBC驱动程序现在是开源的,所以你可以自己添加它;)https://github.com/Microsoft/mssql-jdbc –

+0

那,或者试试[JTDS](http:// jtds .sourceforge.net /)驱动程序,看看你是否可以得到你想要的行为。在其他地区,我发现它是更好的司机。 –

回答

相关问题