Как инициализировать пул соединений DBCP при запуске?

Настройка моего проекта -

  1. Spring JDBC для сохранения
  2. Apache DBCP 1.4 для объединения пулов
  3. Mysql 5 в Linux

Вот журнал моего приложения, который фиксирует взаимодействие с базой данных.

2013-01-29 15:52:21,549 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.core.JdbcTemplate - Executing SQL query [SELECT id from emp]
2013-01-29 15:52:21,558 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource
2013-01-29 15:52:31,878  INFO http-bio-8080-exec-3 jdbc.connection - 1. Connection opened  org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
2013-01-29 15:52:31,878 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections:  1 (1)
2013-01-29 15:52:31,895  INFO http-bio-8080-exec-3 jdbc.connection - 1. Connection closed  org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:247)
2013-01-29 15:52:31,895 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections:  none
2013-01-29 15:52:41,950  INFO http-bio-8080-exec-3 jdbc.connection - 2. Connection opened  org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
2013-01-29 15:52:41,950 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections:  2 (1)
2013-01-29 15:52:52,001  INFO http-bio-8080-exec-3 jdbc.connection - 3. Connection opened  org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
2013-01-29 15:52:52,002 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections:  2 3 (2)
2013-01-29 15:53:02,058  INFO http-bio-8080-exec-3 jdbc.connection - 4. Connection opened  org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
2013-01-29 15:53:02,058 DEBUG http-bio-8080-exec-3 jdbc.connection - open connections:  2 3 4 (3)
2013-01-29 15:53:03,403 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.core.BeanPropertyRowMapper - Mapping column 'id' to property 'id' of type int
2013-01-29 15:53:04,494 DEBUG http-bio-8080-exec-3 org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource

Из журнала видно две вещи:

  1. Пул соединений только начинает создавать соединения при получении первого запроса на выполнение запроса.
  2. Пул из 4 подключений занимает около 30 секунд для инициализации.

Мои вопросы -

  1. Как настроить DBCP для автоматической инициализации при запуске?
  2. Должно ли это так долго создавать соединения?

Note: Please don't suggest switching to C3P0 or Tomcat connection pool. I'm aware of those solutions. I'm more interested in understanding the problem at hand than just a quick fix. Besides I'm sure something so basic should be possible with DBCP as well.

Содержание dbcontext -


    
    
    
    
    
    
    
    

5
nl ja de
Вы пробовали разницу в производительности при отключении testOnBorrow? Во всяком случае, я не считаю, что создание соединений с C3P0 является мгновенным ... создание соединений требует много времени, поэтому требуется объединение. Может быть, вы только что протестировали это неправильно, и разница не такая уж большая?
добавлено автор JanM, источник

3 ответы

The initialSize doesn't take effect until you first request a connection. From the java docs to BasicDataSource#setInitialSize

Устанавливает начальный размер пула соединений.

     

Примечание: этот метод в настоящее время не действует, как только пул   инициализируется. Пул инициализируется в первый раз   вызывается следующие методы: getConnection, setLogwriter,   setLoginTimeout, getLoginTimeout, getLogWriter.

Попробуйте добавить init-method = "getLoginTimeout" к вашему компоненту, чтобы подтвердить это.

6
добавлено

Для веб-приложения вы можете реализовать метод ServletContextListener.contextInitialized() и запустить тестовый запрос (например, выбрать ID из Emp Limit 1), используя ваш уровень DataAccess. Это должно инициализировать ваш пул соединений и сделать его готовым до того, как ваше приложение начнет обслуживать реального пользователя из Интернета.

3
добавлено

Посмотрите <код > initialSize - особенно о том, когда инициализируется пул. Как указывает sbridges, вы можете использовать свойство init-method в beans для вызова одного из методов запуска создания пула.

Кроме того, вы должны изучить, почему для создания соединения требуется в среднем 7,5 секунд ...

Ура,

2
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.

dbGeeks
dbGeeks
545 участник(ов)

Чат про базы данных, их устройство и приемы работы с ними. Разрешаются любые адеватные дискуссии в рамках тематики чата.

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Разработка СУБД
Разработка СУБД
143 участник(ов)

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async