Как мне установить querytimeout в SimpleJdbcTemplate?
-
05-07-2019 - |
Вопрос
Фреймворк Spring имеет два похожих класса:JdbcTemplate - это старый класс Java 1.4, а SimpleJdbcTemplate - более новый, с более приятными методами.
У JdbcTemplate есть метод setQueryTimeout Установить время ожидания, что в основном дает мне доступ к методу с тем же именем в базовом объекте Statement.
Есть ли какой-нибудь способ сделать что-то подобное с SimpleJdbcTemplate Простой шаблон?
Решение:Основываясь на ответе Скаффмана, я создаю SimpleJdbcTemplate
возражать самому себе из JdbcTemplate
, так что теперь я могу делать все, что захочу.Код:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
Немного перебор, но дело сделано.
Обновить:Это действительно сложнее, чем необходимо.Смотрите ответ.
Решение
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 самостоятельно.