DBCP (пул соединений с базой данных Apache Commons) по-прежнему актуален? - PullRequest
14 голосов
/ 29 января 2009

В спецификации JDBC 3.0 говорится о пуле соединений (и подготовленного оператора).

У нас есть несколько автономных программ на Java (т.е. мы не используем сервер приложений), которые используют DBCP для обеспечения пула соединений. Должны ли мы продолжать использовать DBCP или можем воспользоваться преимуществами пула, предоставляемого JDBC, и избавиться от DBCP?

Мы используем MySQL (Connector / J) и в конечном итоге добавим поддержку SQL Server (jTDS); маловероятно, что мы будем поддерживать какие-либо другие базы данных.

РЕДАКТИРОВАТЬ: см. Комментарий ниже о моей попытке удалить библиотеку пулов соединений. Похоже, что DBCP по-прежнему актуален (обратите внимание, что некоторые комментаторы рекомендовали C3P0 вместо DBCP).

Ответы [ 4 ]

13 голосов
/ 30 января 2009

На основе поддержки других авторов я попытался исключить DBCP и напрямую использовать драйвер JDBC MySQL (Connector / J 5.0.4). Я не смог этого сделать.

Похоже, что хотя драйвер и является основой для объединения, он не обеспечивает самое важное: реальный пул (для этого пригодился исходный код). Это предоставлено серверу приложений для предоставления этой части.

Я еще раз взглянул на документацию JDBC 3.0 (у меня есть печатная копия чего-то с пометкой «Глава 11 Пулы соединений», я точно не знаю, откуда она взялась), и я вижу, что драйвер MySQL следует документу JDBC.

Когда я смотрю на DBCP, это решение начинает иметь смысл. Хорошее управление бассейном предоставляет много возможностей. Например, когда вы удаляете неиспользуемое соединение? какие соединения вы чистите? Есть ли жесткое или мягкое ограничение на максимальное количество соединений в пуле? Вы должны проверить соединение на "живость", прежде чем дать его вызывающему абоненту? и т.д.

Резюме: если вы работаете с автономным Java-приложением, вам нужно использовать библиотеку пула соединений. Библиотеки пула подключений по-прежнему актуальны.

7 голосов
/ 29 января 2009

DBCP имеет серьезные недостатки. Я не думаю, что это подходит для производственного приложения, особенно когда так много драйверов поддерживают пул в их DataSource изначально.

Солома, которая сломала спину верблюда, в моем случае, была, когда я обнаружил, что весь пул был заблокирован все время, когда была предпринята новая попытка подключения к базе данных. Поэтому, если с вашей базой данных что-то происходит, что приводит к медленным соединениям или тайм-аутам, другие потоки блокируются, когда они пытаются вернуть соединение в пул - даже если они сделаны с использованием базы данных.

Пулы предназначены для улучшения производительности, а не для ее снижения. DBCP наивен, сложен и устарел.

1 голос
/ 29 января 2009

Я предпочитаю использовать dbcp или c3p0, потому что они не зависят от производителя. Я обнаружил, по крайней мере с mysql или oracle, что всякий раз, когда я пытаюсь что-то сделать с клиентом jdbc, который не является стандартным sql, я должен вводить зависимость времени компиляции от классов вендора. См., Например, очень раздражающий пример здесь .

Я не уверен насчет mysql, но oracle использует свои нестандартные классы для пула соединений.

0 голосов
/ 29 января 2009

Люди все еще используют DBCP, я думаю, что даже Hibernate по умолчанию.

DBCP не отвечает вашим текущим потребностям?

Я не большой сторонник замены инфраструктуры, если уже не существует пробела в производительности или функциональности, который она не может заполнить, даже если вокруг есть более новые или более изощренные альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...