【发布时间】:2017-04-22 14:57:33
【问题描述】:
我正在使用 JDBC 驱动程序sqlserver-jdbc-4.0.jar 连接到 SQL Server。我创建了一个连接并成功使用它。
然后我关闭了 SQL Server 机器的网络接口。当我运行下一个命令时,我的应用程序一侧的 JDBC 驱动程序需要大约 15 分钟才能了解连接丢失。我尝试了几件事:
- 已配置 JDBC 驱动程序属性
LoginTimeout=5, LockTimeout=5, QueryTimeout=5(5 秒) - 调用
Statement.setQueryTimeout()将超时设置为 5 秒 - 调用
Connection.isValid(),超时 5 秒 - 它也卡住了 15 分钟
另一个可能的选项 - Connection.setNetworkTimeout() 但它不是由 SQL Server 驱动程序实现的。我也无法访问 JDBC 驱动程序用来在其上设置 TCP Keepalive 的套接字。
如果我关闭连接然后再次打开它,它会立即明白 SQL Server 实例无法访问。
如何克服我的问题并在几秒钟而不是 15 分钟内检测到丢失的连接?
【问题讨论】:
-
类似问题:stackoverflow.com/questions/36553857/… 恐怕结论是:没有办法。
-
不过,SQL Server JDBC驱动现在是开源的,你可以自己添加;)github.com/Microsoft/mssql-jdbc
-
那个,或者试试JTDS驱动,看看你能不能用那个得到你想要的行为。在其他方面,我发现它是更好的驱动程序。
标签: java sql-server jdbc connection-timeout mssql-jdbc