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 над головой. :(

Ответы на вопрос(3)

Ваш ответ на вопрос