2016-08-25 16 views
0

私は時々クエリを実行するときにmysqlサーバがハングアップする問題があります。私は春のJdbcTemplateを使用してそれに接続しています。 JdbcTemplateにsetTimeoutメソッドがあるのが分かりましたが、タイムアウトが発生したかどうかを確認する方法がわかりません。JdbcTemplate.setQueryTimeoutのタイムアウトのケースをキャプチャする必要があります

try { 
    JdbcTemplate template = new JdbcTemplate(dataSource); 
    template.setQueryTimeout(3); 
    SqlRowSet rs = template.queryForRowSet(sql); 

} catch (DataAccessException e) { 
    String msg = "Can't connect to database."; 
    response.addError(msg + " " + e); 
    logger.error(msg, e); 
    return response; 
} 

が、私は、データベースがダウンした場合、これは正常に動作していることを知っているが、私は場合、クエリは、タイムアウトの結果として停止したかどうかをテストする、またはするかどうかはわかりません。私はこのようにそれを呼んでいますクエリは正常に実行され、レコードは返されませんでした。

私の問題に加えて、実際にサーバーが掛かっている状態を実際に再現することができないため、私自身は実験できません。チェックしなければならない特定のタイプの例外があるか、DataAccessExceptionがスローされますか?あるいは、SqlRowSetでチェックできるものがありますか?

答えて

1

Statement.executeQueryのドキュメントが表示されている場合は、SQLTimeoutExceptionと定義されています。タイムアウトが設定され、超過した場合(多数の条件がある場合)は、スローされます。データベースドライバのドキュメントを確認してください。

は、SpringのJDBCテンプレートは、内部的にこれを呼び出し、java.sqlの例外は、私はこの例外をキャッチすることをお勧めQueryTimeoutException

に春のSQLExceptionTranslatorで翻訳されています。

+0

QueryTimeoutExceptionはDataAccessExceptionを拡張しているので、何もする必要はありません。ありがとう! – Zip184

関連する問題