Как мне установить QueryTimeout для SimpleJdbcTemplate? - PullRequest
5 голосов
/ 30 июля 2009

Spring Framework имеет два похожих класса: JdbcTemplate - старый, класс Java 1.4, и SimpleJdbcTemplate - более новый, с более хорошими методами.

JdbcTemplate имеет метод setQueryTimeout , который в основном дает мне доступ к методу с тем же именем в базовом объекте Statement.

Есть ли способ сделать что-то подобное с SimpleJdbcTemplate ?

Решение : Исходя из ответа Скаффмана, я сам создаю объект SimpleJdbcTemplate из JdbcTemplate, так что теперь я могу делать все, что захочу. Код:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);

Немного глоток, но работа сделана.

Обновление : Это действительно сложнее, чем необходимо. Смотрите ответ.

1 Ответ

4 голосов
/ 30 июля 2009

SimpleJdbcTemplat e не является заменой JdbcTemplate, это просто java5-дружественное дополнение к нему, для определенных операций, которые могут максимально использовать преимущества varargs и generics.

Если вы посмотрите на источник для SimpleJdbcTemplate, вы увидите, что он делегирует всю свою работу объекту JdbcTemplate, и, установив таймаут (или другие параметры) на JdbcTemplate, неявно установить их на SimpleJdbcTemplate также.

Если вы получаете SimpleJdbcTemplate через SimpleJdbcDaoSupport.getSimpleJdbcTemplate(), то JdbcTemplate уже будет правильно подключен.

редактирование:

Например:

public class MyDao extends SimpleJdbcDaoSupport {
    public void doStuff() {
        getJdbcTemplate().setQueryTimeout(x);
        getSimpleJdbcTemplate().execute(...);
    }
}

SimpleJdbcTemplate содержит тот же JdbcTemplate, что и getJdbcTemplate ().

Если вы не расширяете SimpleJdbcDaoSupport, тогда да, вам нужно вручную создать SimpleJdbcTemplate самостоятельно.

...