Может ли кто-нибудь предоставить примеры или ссылки о том, как установить пул соединений JDBC?
При поиске в Google я вижу много разных способов сделать это, и это довольно сбивает с толку.
В конечном итоге мне нужен код для возврата java.sql.Connection
объекта, но у меня проблемы с началом работы ... приветствуются любые предложения.
Обновление: нет javax.sql
или java.sql
есть реализации объединенного подключения? Почему бы не использовать их?
Ответы:
Если вам нужен пул соединений автономного, мое предпочтение отдается C3P0 над ДБХПОМ (что я уже упоминал в этом предыдущем ответе ), я просто имел слишком много проблем с ГСБДОМ при большой нагрузке. Использовать C3P0 очень просто. Из документации :
Но если вы работаете на сервере приложений, я бы рекомендовал использовать встроенный пул соединений, который он предоставляет. В этом случае вам необходимо настроить его (см. Документацию вашего сервера приложений) и получить DataSource через JNDI:
источник
Обычно, если вам нужен пул соединений, вы пишете приложение, которое работает в некоторой управляемой среде, то есть вы работаете на сервере приложений. В этом случае не забудьте проверить, какие средства пула соединений предоставляет ваш сервер приложений, прежде чем пробовать другие варианты.
Готовое решение будет лучше всего интегрировано с остальными возможностями серверов приложений. Однако, если вы не работаете на сервере приложений, я бы порекомендовал компонент Apache Commons DBCP . Он широко используется и обеспечивает все основные функции пула, которые требуются большинству приложений.
источник
HikariCP
Это современно, быстро, просто. Я использую его для каждого нового проекта. Я предпочитаю его C3P0, не слишком хорошо знаю другие пулы.
источник
Не изобретайте велосипед.
Попробуйте один из легко доступных сторонних компонентов:
Apache DBCP поставляется с другим примером того, как настроить пул javax.sql.DataSource . Вот один пример, который поможет вам начать работу.
источник
disclecsia
взял меня лучше. Вы видите, что ссылка верна. :)tomcat-jdbc
. Вы можете получить его в Maven Central ->org.apache.tomcat:tomcat-jdbc:jar:7.0.22
-> search.maven.org/…Я бы рекомендовал использовать библиотеку commons-dbcp . Существует множество примеров того, как его использовать, вот ссылка на простой ход . Использование очень простое:
Вам нужно создать источник данных только один раз, поэтому обязательно прочтите документацию, если вы не знаете, как это сделать. Если вы не знаете, как правильно писать операторы JDBC, чтобы не допустить утечки ресурсов, вы также можете прочитать эту страницу в Википедии .
источник
javax.sql.DataSource
интерфейса содержит реализацию «пула соединений» (кроме того, я думаю, вы уже знаете, что такое интерфейс JDBC)На сервере приложений, который мы используем там, где я работаю (Oracle Application Server 10g, насколько я помню), пулы обрабатываются сервером приложений. Мы получаем с
javax.sql.DataSource
помощью поиска JNDI сjavax.sql.InitialContext
.это сделано что-то вроде этого
(Мы не писали этот код, он скопирован из этой документации .)
источник
Бассейн
performance
[за счет использования одного и того же объекта для выполнения любого действия с объектом-данными] иmemory
[выделение и освобождение многих объектов создает значительные накладные расходы на управление памятью].«
Object
Пул [ пул,String
постоянный пул,Thread
пул, пул соединений]Постоянный пул строк
Пример: строка для проверки уникального объекта из пула.
Пул соединений с использованием Type-4 драйвера с использованием 3 - библиотек [
DBCP2
,c3p0
,Tomcat JDBC
]Type 4 - The Thin driver converts JDBC calls directly into the vendor-specific database protocol Ex[Oracle - Thick, MySQL - Quora].
викиВ механизме пула соединений, когда класс загружается, он получает
physical JDBC connection
объекты и предоставляет пользователю завернутый объект физического соединения.PoolableConnection
это оболочка вокруг фактического соединения.getConnection()
выберите одно из свободных обернутых соединений из пула объектов соединения и верните его.close()
вместо закрытия он возвращает обернутое соединение обратно в пул.Пример: использование пула соединений ~ DBCP2 с Java 7 [
try-with-resources
]jdbc:<DB>:<drivertype>:<HOST>:<TCP/IP PORT>:<dataBaseName>
jdbc:
oracle
:thin:@localhost:1521:myDBName
jdbc:
mysql
://localhost:3306/myDBName
connectionpool.properties
Веб- приложение: чтобы избежать проблем с соединением, когда все соединения закрыты [MySQL "wait_timeout" по умолчанию 8 часов], чтобы повторно открыть соединение с базовой БД.
Вы можете сделать это, чтобы проверить каждое соединение, установив testOnBorrow = true и validationQuery = "SELECT 1" и не используя autoReconnect для сервера MySQL, поскольку он устарел. выпуск
См. Также:
источник
public class StringPoolTest
просто есть 2 метода void, поэтому они ничего не возвращают. Действительно ли этот код выполняет процесс управления пулом строк? Кажется, он даже не использует никаких аргументов.s1
не определено?ConnectionPool
Классу. Спасибо.В конце 2017 года Proxool, BoneCP, C3P0, DBCP в настоящее время в основном не функционируют. HikariCP (созданный в 2012 году) кажется многообещающим, он решает все, что я знаю. http://www.baeldung.com/hikaricp
У Proxool есть ряд проблем:
- При большой нагрузке может превышать максимальное количество подключений и не возвращаться ниже максимального
- Может удается не возвращаться к минимальным подключениям даже после истечения срока действия
- Может блокировать весь пул (и все потоки сервера / клиента) если у него возникли проблемы с подключением к базе данных во время потока HouseKeeper (не использует .setQueryTimeout)
- поток HouseKeeper , имея блокировку пула соединений для своего процесса, запрашивает поток Prototyper для воссоздания соединений (развертка), что может привести к состоянию гонки / блокировке. В этих вызовах методов последний параметр всегда должен иметь значение sweep: false во время цикла, только sweep: true под ним.
- HouseKeeper требуется только одна развертка PrototypeController в конце и есть еще [упомянутые выше]
- Поток HouseKeeper проверяет наличие тестирования соединений, прежде чем увидеть, какие соединения могут быть истекшими [некоторый риск тестирования истекшего соединения, которое может быть прервано / прервано из-за других тайм-аутов для БД в брандмауэре и т. Д.]
- Проект имеет незаконченный код (свойства, которые определены но не были приняты меры)
- Максимальный срок службы соединения по умолчанию, если он не определен, составляет 4 часа (чрезмерно)
- Поток HouseKeeper выполняется каждые пять секунд на пул (чрезмерно).
Вы можете изменить код и внести эти улучшения. Но поскольку он был создан в 2003 году и обновлен в 2008 году, ему не хватало почти 10-летних улучшений Java, которые используют такие решения, как hikaricp.
источник
Как ответили другие, вы, вероятно, будете довольны Apache Dbcp или c3p0 . Оба популярны и отлично работают.
Что касается вашего сомнения
Они не предоставляют реализации, скорее интерфейсы и некоторые классы поддержки, только для программистов, реализующих сторонние библиотеки (пулы или драйверы). Обычно вы даже не смотрите на это. Ваш код должен прозрачно обрабатывать соединения из вашего пула так же, как они были "простыми" соединениями.
источник
Vibur DBCP - еще одна библиотека для этой цели. Несколько примеров, показывающих, как настроить его для использования с Hibernate, Spring + Hibernate или программно, можно найти на его веб-сайте: http://www.vibur.org/
Также см. Отказ от ответственности здесь .
источник
В Apache Commons есть библиотека для этой цели: DBCP . Если у вас нет странных требований к вашим пулам, я бы использовал библиотеку, поскольку она обязательно будет сложнее и сложнее, чем вы могли бы надеяться.
источник
Вам следует подумать об использовании UCP. Универсальный пул соединений (UCP) - это пул соединений Java. Это многофункциональный пул соединений, тесно интегрированный с Oracle Real Application Clusters (RAC), ADG, базами данных DG.
Обратитесь к этой странице для получения более подробной информации о UCP.
источник
MiniConnectionPoolManager
- это реализация с одним java-файлом, если вы ищете встраиваемое решение и не слишком беспокоитесь о производительности (хотя я не тестировал ее в этом отношении).Это мульти-лицензионные EPL , LGPL и MPL .
В его документации также есть альтернативы, которые стоит проверить (помимо DBCP и C3P0):
источник