了解 JDBC 驱动程序中的超时属性
JDBC 驱动程序中的超时设置可用于确定应用程序响应能力优先级。 默认情况下,大多数驱动程序的超时都会优先等待结果,以确保数据一致性。 确保选择适合应用程序需求的超时。
对于初始连接,将使用 loginTimeout
:
loginTimeout
是驱动程序等待与服务器建立连接的时间(以秒为单位)。 如果超出此时间,将返回错误,并且不会建立开放连接。 零值表示该超时为默认系统超时,在 11.2 及更高版本中默认为 30 秒。 在版本 10.2 及更低版本中,默认超时为 15 秒。 任何非零值都表示因连接失败而中止连接之前驱动程序应等待的秒数。 如果在与 JDBC 驱动程序建立连接时一直遇到问题,可能需要将此超时时间延长到 90 秒,甚至 120 秒。
建立连接后,将在语句执行期间使用 queryTimeout
、cancelQueryTimeout
和 lockTimeout
。 socketTimeout
用于与服务器的任何驱动程序通信。
queryTimeout
是在向服务器发送执行命令后,驱动程序等待从服务器接收包含数据的答复的时间(以秒为单位)。 超过此时间后,将取消命令。 超过此超时不会关闭连接。 默认值为 -1,表示无期限超时。cancelQueryTimeout
是驱动程序在强制终止/关闭连接之前等待服务器确认queryTimeout
取消的时间(以秒为单位)。 也就是说,在关闭连接之前,驱动程序等待的时间总量为cancelQueryTimeout
加queryTimeout
秒。 将此超时设置为非零值可确保当查询超时时,如果服务器出现网络或通信故障,应用程序可以保持响应。此属性的默认值为 -1,表示无限期等待下去。lockTimeout
是在锁阻止语句执行的情况下等待释放锁的时间。 超过此超时不会导致连接关闭。 此属性的默认值为 -1,表示无限等待下去。socketTimeout
适用于与服务器的所有套接字通信。 如果服务器通过不确认或答复数据停止与驱动程序的通信,驱动程序将等待socketTimeout
,然后才会关闭连接。 将此超时设置为非零值可确保在服务器出现网络或通信故障时应用程序能够保持响应。 默认值为 0,表示无期限超时。 确保socketTimeout
大于queryTimeout
,以避免在queryTimeout
窗口期间出现套接字超时异常。 同样,确保socketTimeout
大于cancelQueryTimeout
,以避免在cancelQueryTimeout
窗口期间出现套接字超时异常。
应用程序的合理超时值取决于应用程序的优先级。 如果将超时设置为较低的值,则应用程序响应能力优先于数据一致性。 达到超时时,应用程序需要确定最佳操作方案。 该决策基于正在执行的数据库操作。 例如,对于 SELECT
语句,该决策可能是向用户报告错误,也可能是重新连接并重试。 对于 INSERT
或 UPDATE
语句,该决策可能有所不同。
对于响应式应用程序,应将 loginTimeout
和 queryTimeout
设置为相对较低的值。 同样,还应将 cancelQueryTimeout
设置为低值,以确保在超过 queryTimeout
时,驱动程序等待服务器确认查询取消的时间不会过长。 最后,socketTimeout
应设置为防止驱动程序在与服务器的连接中断(网络中断、服务器故障等)的任何情况下等待过长的时间。
属性摘要
属性 | 说明 | 默认 | 连接结果 |
---|---|---|---|
loginTimeout |
因连接失败而中止连接之前驱动程序应等待的秒数。 | 30 秒 [11.2 及更高版本], 否则为 15 秒 |
已关闭的连接 |
queryTimeout |
在取消查询之前等待的秒数。 | -1 [无限超时时间] | 打开的连接 |
cancelQueryTimeout |
等待确认 QueryTimeout 取消的秒数。 | -1 [无限超时时间] | 已关闭的连接 |
lockTimeout |
数据库返回锁定超时错误之前等待的毫秒数。 | -1 [无限超时时间] | 打开的连接 |
socketTimeout |
等待套接字读取或写入的毫秒数。 | 0 [无限超时时间] | 已关闭的连接 |