在我的应用程序中,我使用Spring和JdbcDAOSupport通过TCP / IP连接到MSSQL数据库。它在连接稳定时工作正常,但是当我在迭代结果集时拔下以太网电缆时应用程序暂停。它没有任何例外。
JdbcTemplate jdbc = getJdbcTemplate();
return jdbc.query(sql, mapper, someArgs);
其中mapper是我自己的RowMapper类。我尝试过使用Connection和PreparedStatement但它没有解决问题。有没有人对此有任何解决方案或有类似的问题?
答案 0 :(得分:3)
应用程序挂起,因为TCP / IP的设计考虑了错误的连接。当数据包未到达目的地时,发送方只需以指数退避重试。如果不希望出现这种情况,请配置套接字阻塞超时(SO_TIMEOUT)。
不幸的是,SQL Server JDBC驱动程序没有配置套接字超时的选项,因此它将无限期地阻塞。
正如Nathan Hughes在评论中指出的那样,jTDS driver确实有一个配置socketTimeout的选项,所以你可以尝试使用该驱动程序。