2

在我的应用程序中,我使用 Spring 和 JdbcDAOSupport 通过 TCP/IP 连接到 MSSQL 数据库。当连接稳定时它工作正常,但是当我在遍历结果集时拔下以太网电缆时,应用程序会挂起。它不会抛出任何异常。

JdbcTemplate jdbc = getJdbcTemplate();
return jdbc.query(sql, mapper, someArgs);

其中 mapper 是我自己的 RowMapper 类。我尝试使用 Connection 和 PreparedStatement 并没有解决问题。有没有人对此有任何解决方案或有类似的问题?

4

1 回答 1

3

应用程序挂起,因为 TCP/IP 的设计考虑了不良连接。当一个数据包没有到达它的目的地时,发送者简单地用指数回退重试。如果此行为不可取,则配置套接字阻塞超时 (SO_TIMEOUT)。

不幸的是,SQL Server JDBC 驱动程序没有配置套接字超时的选项,因此它会无限期地阻塞。

正如 Nathan Hughes 在他的评论中指出的那样,jTDS 驱动程序确实有一个配置 socketTimeout 的选项,因此您可以尝试使用该驱动程序。

于 2013-02-19T15:12:51.837 回答