连接复原 (JDBC)

下载 JDBC 驱动程序

通过连接复原,在限定范围内,中断的空闲连接可重新连接。 如果初始连接失败,通过连接复原,还可让驱动程序自动重试连接。 仅 SQL Server 2014 及更高版本和 Azure SQL 数据库支持重新连接中断的空闲连接。 此功能从 Microsoft JDBC Driver 10.2.0 for SQL Server 开始提供。

连接重试

连接复原能力包括两个方面。 第一个是能够以透明方式重试初始数据库连接。 第二个是能够以透明方式恢复现有的空闲连接。 典型的空闲连接可能是连接池中的一个连接。 “空闲”连接通常是指空闲至少 30 秒的连接。 这些连接通常可能由服务器,或客户端和服务器之间的网络设备关闭。

JDBC 驱动程序提供了两个用于控制连接复原行为的连接选项。 可以将这些选项添加到连接字符串中,或通过数据源属性设置这些选项。

关键字 默认值 说明
connectRetryCount 介于 0 和 255 之间(含限值)的整数 1 在放弃尝试之前,尝试建立或重建连接的最大次数。 默认情况下,将重试一次。 值为 0 表示不会尝试重试。
connectRetryInterval 介于 1 和 60 之间(含限值)的整数 10 连接重试的间隔时间(以秒为单位)。 驱动程序在检测到空闲连接断开后立即尝试重新连接,然后在等待 connectRetryInterval 秒后重试。 如果 connectRetryCount 为 0,则忽略此关键字。

如果 connectRetryCount 乘以 connectRetryInterval 的乘积大于 loginTimeout,那么一旦达到 loginTimeout,驱动程序将停止尝试连接。 否则,将继续尝试重新连接,直到达到 connectRetryCount

连接恢复

为了检测中断的空闲连接,驱动程序依赖于套接字级别的 TCP keepalive 包。 在 Linux 和 Java 11+ 上,当出现故障 (KeepAliveInterval) 时,驱动程序会自动启用 keepalive 数据包,且重试间隔时间为 30 秒 (KeepAliveTime),延迟为 1 秒。

重要

在 Windows 和 macOS 上,或在 Java 8 上,必须在操作系统中手动配置 keepalive,以便充分利用断开的空闲连接的还原。 有关如何配置 keepalive 的信息,请参阅连接到 Azure SQL 数据库

限制

在以下情况下,无法还原中断的空闲连接:

  • 存在尚未完全分析或缓冲的打开的结果集
  • 针对 Azure SQL 切换数据库
  • 存在打开的事务

另请参阅

连接到 Azure SQL 数据库
技术文章 - 空闲连接复原
JDBC 驱动程序概述