Пул соединений с базой данных Java (BoneCP, DBPool и c3p0)

Какая библиотека пула соединений лучше всего подходит для приложения Java вне контейнера J2EE?

  • Я слышал, что c3p0 устаревает.
  • Библиотека общего пула Джакарты больше не разрабатывается

Поэтому у меня остались BoneCP и DBPool. Из того, что я могу сказать, у обоих ограниченная активность. Основное отличие, которое я вижу, это производительность, в которой BoneCP, похоже, выигрывает. Однако документация довольно слабая.

Какую библиотеку пула баз данных вы использовали в реальном мире и почему? Что было хорошего и плохого?


person Stephane Grenier    schedule 08.11.2011    source источник
comment
Для тех, кому любопытно, я остановился на BoneCP.   -  person Stephane Grenier    schedule 06.08.2013
comment
У вас есть ссылка на подробную документацию по настройке BoneCP? Или, пожалуйста, поделитесь, как использовать BoneCP в JBoss?   -  person    schedule 21.01.2014


Ответы (6)


На работе мы использовали BoneCP (в качестве замены c3p0) и, насколько я знаю, проблем не было (я сам не обновлял). Судя по тому, что я видел и читал, это выглядит как хорошо спроектированная надежная библиотека, и я бы лично использовал ее вместо альтернатив: похоже, это одна из тех «просто работающих» библиотек, которые приятно иметь под рукой.

Ничего плохого не могу сказать о DBPool, я просто недостаточно знаком с ним; хотя просмотр документации на его сайте, безусловно, кажется плюсом.

person StaxMan    schedule 11.11.2011
comment
Последний выпуск BoneCP все еще 0.7.1, означает ли это, что он все еще находится на стадии бета-тестирования или он достаточно зрелый? - person Giovanni Botta; 19.04.2013
comment
Имейте в виду, что управление версиями очень субъективно, контекстуально. Так что точное значение на самом деле не имеет большого значения. Некоторые авторы не решаются назвать свою библиотеку 1.0. JDOM потребовались годы, чтобы достичь этого, даже несмотря на то, что он был стабильным. Так что я предполагаю, что он стабилен, его можно использовать. - person StaxMan; 19.04.2013
comment
Тесты со страницы BoneCP [ссылка] (http://jolbox.com/index.html?page=http://jolbox.com/benchmarks.html) выглядят великолепно. - person aloplop85; 26.06.2013
comment
На данный момент я не могу рекомендовать текущую версию BoneCP. Я запускаю его уже пару дней, и это неприемлемо багги. Я бы использовал HikariCP, если бы Java 7 был для меня вариантом . - person Matt Ball; 15.01.2014
comment
@MattBall Когда вы говорите глючит, каким образом? С какими проблемами вы столкнулись? - person Stephane Grenier; 27.05.2014
comment
@StephaneGrenier видит две ошибки, о которых я упоминал в своем предыдущем комментарии: bugs.launchpad.net/bonecp/ +bug/1243551 и bugs.launchpad.net/bonecp/+bug/1259257 - person Matt Ball; 27.05.2014
comment
Также обратите внимание, что HikariCP теперь поддерживает Java 6. - person Matt Ball; 27.05.2014

Мы используем C3P0 как в Tomcat, так и за его пределами. Однако мониторинг и ведение журнала не самые лучшие, поэтому мы начнем использовать пул соединений SpringSource. Одна из лучших функций, которую я с нетерпением жду, — это точное отображение того, какие операторы SQL выполняются в любой конкретный момент времени.

Одна вещь, которую мы должны были добавить в C3P0, — это средство определения времени ожидания соединения конкретным запросом на соединение, когда пул заполнен и все соединения заняты:

            public Connection getConnection() throws SQLException
            {
                    long t = System.currentTimeMillis();
                    ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate();
                    Connection conn = null;

                    if (ds.getNumBusyConnections() == ds.getMaxPoolSize())
                    {
                            logger.info("Pool (" + ds.getUser() + ") full, waiting for connection");
                            conn = ds.getConnection();
                            t = System.currentTimeMillis() - t;
                            logger.info("Connection busy wait time (" + ds.getUser() + "): " + t + "ms");
                    }
                    else
                    {
                            conn = ds.getConnection();
                    }

                    return conn;
            }

Итак, что вы должны учитывать:

  1. поддержка и активность (как вы заметили)
  2. скорость
  3. мониторинг, регистрация и контроль производства

BoneCP выглядит быстрым (я не слышал о нем раньше), но, честно говоря, C3P0 тоже оказался для нас более чем быстрым. Когда мы тестировали несколько 4 или 5 лет назад, DBCP был ужасно медленным (похоже, они это исправили), пул Oracle был довольно медленным, а C3P0 был очень быстрым. Наш тест был очень похож на тот, что представлен на сайте BoneCP.

Я ничего не знаю об управляемости BoneCP. № 3 оказался для нас самой важной функциональностью в производственной среде.

person Scott A    schedule 08.11.2011
comment
Что касается регистрации конкретных операторов sql, вы не можете включить журнал отладки для пакета java.sql? - person r0ast3d; 09.11.2011
comment
Насколько я понимаю, пул SpringSource позволяет проводить проверку в реальном времени через JMX. - person Scott A; 09.11.2011
comment
Вы также можете включить ведение журнала SQL с помощью BoneCP: jolbox.com/bonecp/downloads/site/apidocs/index.html?com/jolbox/ методом setLogStatementsEnabled. - person Dan W; 09.11.2011
comment
Большинство, если не все, могут войти в систему. Вопрос в том, какие операторы SQL выполняются прямо сейчас, в каких потоках и в каких пулах? Вы можете получить это из журналов с некоторой работой, но JMX проще с точки зрения операций. - person Scott A; 09.11.2011
comment
@ScottA извините, пост довольно старый, но не могли бы вы дать указатель на пул SpringSource, о котором вы упомянули? - person mzzzzb; 02.07.2013
comment
@mzzzzb Пул высокой параллелизма SpringSource поставляется с tcServer. Инструкции по настройке можно найти здесь: static.springsource.com/projects /tc-server/6.0/admin/ Вы ищете источник данных сервера tc. - person Scott A; 02.07.2013

Взгляните на HikariCP, который заменяет BoneCP https://brettwooldridge.github.io/HikariCP/. тот, который я использую сейчас в своем проекте.

person adoalonso    schedule 21.07.2016

Когда пару лет назад мы выбирали, это было как раз между c3p0 и dbcp. В то время c3p0 был тем, кто мог восстановить свои соединения после перезапуска оракула. С DBCP нам пришлось перезапустить сервер приложений, чтобы он снова заработал.

Также я нахожу функцию отладки зависших соединений c3p0 чрезвычайно полезной для отслеживания утечек соединения, которые иначе было бы чрезвычайно трудно найти.

Чего мне не хватало в c3p0, так это удобного логирования выполненных операторов с информацией о том, сколько времени они заняли.

person mrembisz    schedule 10.11.2011

В настоящее время я испытываю BoneCP в среде крупной корпоративной интрасети. У меня были постоянные проблемы с потоками с c3p0 (довольно распространенные, если вы покопаетесь), поэтому я провел свое исследование, и это показалось мне лучшей стандартной библиотекой. Конфигурация немного утомительна, но как только вы ее освоите, она кажется отличной.

person eric    schedule 22.02.2013

Я использовал c3p0 вместе с DataNucleus/JPA, и мне было легко переключиться на BoneCP. Практически все, что мне нужно было сделать, это изменить конфигурацию DataSource в файле контекста Spring.

Насколько я видел, тесты BoneCP действительно хороши: http://www.databaseskill.com/2282333/, http://jolbox.com/benchmarks.html

person Adrian Ber    schedule 04.03.2015