Spring DAO - первый запрос с JdbcTemplate занимает гораздо больше времени
В моем приложении я использую Spring MVC с шаблоном DAO для доступа к базе данных MSSql с помощью JdbcTemplate. Все работает нормально, но я заметил, что первый запрос занимает немного больше времени, чем следующий запрос в каждом отдельном запросе.
Я написал простой тест:
String sql = "SELECT 1";
for (int i = 0; i < 5; i++) {
long startTime = System.currentTimeMillis();
jdbcTemplate.queryForList(sql);
logger.debug("query took: " + TimeHelper.showDuration(startTime));
}
результат:
2012-08-28 12:55:07,665 | Start
2012-08-28 12:55:08,878 | query took: 424 milliseconds
2012-08-28 12:55:08,893 | query took: 15 milliseconds
2012-08-28 12:55:08,908 | query took: 14 milliseconds
2012-08-28 12:55:08,922 | query took: 14 milliseconds
2012-08-28 12:55:08,937 | query took: 14 milliseconds
Я понимаю, что Spring выполняет некоторые действия, чтобы подготовить все компоненты. Но если есть запрос к серверу, который выполняет только 1 запрос, то на каждый запрос уходит 424 миллисекунды.
Мой вопрос: это поведение нормально? Или может быть какая-то ошибка в моем коде? Работает ли так, что Spring при каждом запросе нуждается в этом времени для инициализации? (и все остальные запросы в запросе будут выполняться быстро)? Или я могу выполнить некоторую инициализацию при запуске, и тогда при каждом запросе первый запрос тоже будет занимать 15 мс?
Моя конфигурация следующая:
datasource: class="org.apache.commons.dbcp.BasicDataSource"
Дао вводится для проверки класса с:
@Resource(name="testDao")
private TestDao testDao;
Я использую аннотации на основе подхода. Тестовый класс и DAO не используют @Transaction.
РЕДАКТИРОВАТЬ: Я также пытался настроить initialSize, но это не помогло (при initialSize = 2 это занимает 800 мс, а initialSize = 1 - 400 мс - каждый запрос).
Я не понимаю, почему на каждый запрос уходит 400 мс, если его можно получить в течение 15 мс. Похоже, что с Spring над головой. :(