SimpleJdbcTemplateでQueryTimeoutを設定するにはどうすればよいですか?
-
05-07-2019 - |
質問
Spring Frameworkには2つの類似したクラスがあります。JdbcTemplateは古いJava 1.4クラスであり、SimpleJdbcTemplateはより優れたメソッドを備えた新しいクラスです。
JdbcTemplateにはメソッド setQueryTimeout 。基本的に、基になるStatementオブジェクトの同じ名前のメソッドにアクセスできます。
解決策:skaffmanの答えに基づいて、 JdbcTemplate
から SimpleJdbcTemplate
オブジェクトを自分で作成するので、何でも好きなことができます。コード:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
少し一口ですが、仕事は完了です。
更新:これは実際には必要以上に複雑です。答えをご覧ください。
解決
SimpleJdbcTemplat
eは、 JdbcTemplate
の代わりではなく、varargsとジェネリックを最大限に活用できる特定の操作のための、java5に適した単なる補足です。
SimpleJdbcTemplate
のソースを見ると、すべての作業が JdbcTemplate
オブジェクトに委任されていることがわかります。タイムアウト(または JdbcTemplate
のその他のオプション)、 SimpleJdbcTemplate
にも暗黙的に設定します。
SimpleJdbcDaoSupport.getSimpleJdbcTemplate()
を介して SimpleJdbcTemplate
を取得している場合、 JdbcTemplate
は既に正しく配線されています。
編集:
例:
public class MyDao extends SimpleJdbcDaoSupport {
public void doStuff() {
getJdbcTemplate().setQueryTimeout(x);
getSimpleJdbcTemplate().execute(...);
}
}
SimpleJdbcTemplateには、getJdbcTemplate()によって取得されるものと同じJdbcTemplateが含まれています。
SimpleJdbcDaoSupportを拡張しない場合、はい、自分でSimpleJdbcTemplateを手動で構築する必要があります。