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 に答える