Является ли DBCP (объединение пулов соединений с базой данных Apache Commons) все еще актуальным?

StackOverflow https://stackoverflow.com/questions/490288

Вопрос

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

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

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

Редактировать:Смотрите комментарий ниже о моей попытке устранить библиотеку пула подключений.Похоже, что DBCP все еще актуален (обратите внимание, что некоторые комментаторы рекомендовали C3P0 вместо DBCP).

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top