Контекст
GaussDB(DWS) не имеет собственного JDBC‑пула соединений, а унаследованный пул соединений PostgreSQL отключён. Используйте сторонние пулы соединений, такие как Druid, HikariCP или DBCP 2.
- Унаследованный JDBC‑пул соединений от PostgreSQL отключён и не рекомендуется.
- Определите версию JDBC и драйвера для загрузки и способ настройки параметров пула соединений в соответствии с требованиями сайта.
Настройка пула соединений DBCP 2
- Скачайте пакет драйвера JDBC. Для подробностей см Загрузка драйвера JDBC или ODBC.
- Скачайте commons-dbcp2 пакет драйвера из https://commons.apache.org/dbcp/download_dbcp.cgi.
- Скачайте commons-logging драйверный пакет из https://commons.apache.org/proper/commons-logging/download_logging.cgi.
- Скачайте commons-pool2 драйверный пакет из https://commons.apache.org/proper/commons-pool/download_pool.
- Добавьте JDBC драйверный пакет и commons-dbcp2, commons-logging, и commons-pool2 драйверные пакеты в проект и настройте параметры, связанные с пулом соединений базы данных.Note
- Включение removeAbandoned позволяет пулу соединений вернуть и повторно использовать отброшенное соединение. Это происходит, когда условия (getNumIdle() < 2) и (getNumActive() > getMaxTotal() - 3) выполнены.
- Например, если maxTotal установлен в 20, имеется 18 активных соединений и одно соединение ограничено. В этом случае, removeAbandoned срабатывает.
- Активное соединение удаляется только когда оно не используется в течение времени, указанного в removeAbandonedTimeout. Значение по умолчанию — 300 секунд.
- Обход результирующего набора не считается использованием. Создание statement, prepared statement, callable statement или выполнение запроса сбрасывает lastUsed свойство его родительского соединения.
- В системах с высокой нагрузкой настройка maxIdle меньшее значение может привести к немедленному закрытию новых соединений. Это происходит потому, что активные потоки закрывают соединения быстрее, чем те, которые открывают соединения. В результате количество простоя соединений превышает значение maxIdle. В системах с высокой нагрузкой наиболее подходящее значение maxIdle в системе с высокой нагрузкой зависит от сценария применения, но значение по умолчанию является хорошим начальным значением.
Таблица 1 Параметры пула соединений DBCP 2 Параметр
Значение по умолчанию
Описание
driverClassName
Введите значение org.postgresql.Driver.
Имя драйвера базы данных.
url
N/A
URL для подключения к базе данных.
имя пользователя
N/A
Имя пользователя.
пароль
N/A
Пароль.
connectionProperties
N/A
Параметры соединения отправляются драйверу JDBC при установке нового соединения. Строка должна быть в формате [Parameter name=Parameter value;].
NOTE:Необходимо указать атрибуты username и password. Поэтому эти два параметра не нужно включать здесь.
defaultAutoCommit
N/A
Автоматическая отправка. По умолчанию соединение, созданное через текущий пул соединений, находится в состоянии автоматической отправки. Если этот параметр не установлен, то setAutoCommit метод не вызывается.
defaultReadOnly
N/A
Настройка только для чтения. По умолчанию соединение, созданное через текущий пул соединений, только для чтения. Если соединение не установлено, то setReadOnly метод не вызывается.
defaultTransactionIsolation
N/A
Уровень изоляции транзакций.
Для соединений, создаваемых через этот пул, используется политика изоляции транзакций по умолчанию. Значение может быть одним из следующих:
- NONE
- READ_COMMITTED: Операция чтения зафиксирована.
- READ_UNCOMMITTED: Операция чтения не зафиксирована.
- REPEATABLE_READ
- SERIALIZABLE
defaultCatalog
N/A
По умолчанию используется каталог для соединений, созданных через этот пул.
cacheState
true
Состояние кеша пула соединений.
Если этот параметр установлен в true, текущий статус только для чтения и настройки автофиксации кешируются во время первой операции чтения или записи после подключения пула ресурсов. Это исключает необходимость дополнительных запросов к базе данных на последующих getter вызовы.
Если базовое соединение доступно напрямую, изменения состояния только для чтения или настроек автофиксации не обновят кеш. Установите этот параметр в false чтобы отключить кеширование в таких случаях.
defaultQueryTimeout
null
Интервал тайм‑аута запроса.
- Введите целое число, которое используется для указания интервала тайм‑аута запроса при создании оператора.
- Если значение null, используются настройки драйвера по умолчанию.
enableAutoCommitOnReturn
true
Когда соединение возвращается в пул, оно автоматически фиксируется.
Устанавливая его в true вернет соединение в пул с autoCommit установлен в true по умолчанию.
rollbackOnReturn
true
Отменить все операции, когда соединение возвращается в пул.
Устанавливая его в true будет автоматически выполнено "rollback()" когда соединение возвращается в пул, при условии, что автоотправка включена.
initialSize
0
Количество первоначальных соединений. Количество соединений, созданных во время инициализации при запуске текущего пула соединений. Исходная версия — 1.2.
maxTotal
8
Максимальное количество активных соединений в пуле. Отрицательное значение означает отсутствие ограничения.
maxIdle
8
Максимальное количество простояющих соединений в пуле. Избыточные простоящие соединения освобождаются при возврате в пул. Отрицательное значение означает отсутствие ограничения.
minIdle
0
Минимальное количество простояющих соединений. Минимальное количество простояющих соединений, которые следует сохранять в пуле. Если количество простояющих соединений опускается ниже этого значения, создаются новые простоящие соединения. Значение 0 означает, что не создаются простоящие соединения.
ПРИМЕЧАНИЕ:Значение вступает в силу только когда timeBetweenEvictionRunsMillis установлено положительное число.
maxWaitMillis
N/A
Максимальное время ожидания получения соединения из пула соединений.
- Если этот параметр установлен в –1 и если соединение недоступно, пул соединений ждёт бесконечно, пока соединение не будет получено.
- Если параметр установлен в N, пул соединений ждёт N миллисекунд. Если время ожидания недостаточно, генерируется исключение.
validationQuery
SELECT 1
SQL‑запрос подтверждения, который проверяет соединение до того, как оно будет возвращено вызывающему пулом соединений.
- Если указано, запрос должен быть SELECT оператор, который возвращает как минимум одну строку данных.
- Если значение не указано, соединение проверяется вызовом "isValid()" метод.
validationQueryTimeout
N/A
Интервал таймаута запроса для корректных SQL‑операторов, в секундах.
Если параметр установлен положительным числом, значение передается в "setQueryTimeOut()" метод JDBC‑драйвера. Настройка применима к SQL‑оператору, подтверждающему корректность запроса.
testOnCreate
false
Нужно ли проверять действительность соединения сразу после создания. Если проверка не удалась, попытка создания завершается неудачей.
testOnBorrow
true
Нужно ли проверять действительность соединения при выдаче из пула. Если проверка не удалась, соединение освобождается и выбирается другое.
testOnReturn
false
Нужно ли проверять действительность соединения перед возвратом в пул.
testWhileIdle
false
Нужно ли проверять действительность незанятых соединений с помощью эвиктора, если он доступен. Недействительные соединения освобождаются.
timeBetweenEvictionRunsMillis
-1
Время гибернации (в миллисекундах) потока эвикции неактивных объектов. Неположительное значение отключает поток.
numTestsPerEvictionRun
3
Количество объектов, проверяемых во время работы каждого потока выселения простоящих объектов.
minEvictableIdleTimeMillis
1000 * 60 * 30
Минимальное количество миллисекунд, в течение которых объекты, соответствующие условиям выселения, находятся в простое в пуле. Минимальная длительность освобождения простоящего соединения в миллисекундах.
softMinEvictableIdleTimeMillis
-1
Минимальное количество миллисекунд, в течение которых объекты, соответствующие условиям выселения, находятся в простое в пуле.
Простоящие соединения освобождаются после как минимум N миллисекунд, при условии, что в пуле сохраняется как минимум количество соединений, указанное параметром minIdle.
Если miniEvictableIdleTimeMillis установлено в положительное число, выселитель простоящих соединений проверяет miniEvictableIdleTimeMillis сначала, а затем softMinEvictableIdleTimeMillis и minIdle условие.
maxConnLifetimeMillis
-1
Максимальное время жизни соединения (в миллисекундах). Соединения, превышающие это время, завершаются при следующей активации, пассивации или проверке. Значение 0 или отрицательное значение означает неограниченное время жизни.
logExpiredConnections
true
Записывать ли лог, когда просроченное соединение закрывается пулом. Если продолжительность жизни соединения превышает maxConnLifetimeMillis, он будет отозван пулом соединений, и по умолчанию будет создан лог. Если этот параметр установлен в false, лог не будет записан.
connectionInitSqls
N/A
Этот параметр выполняет набор SQL‑запросов для инициализации физического соединения при его первом создании. Эти запросы выполняются только один раз для каждого соединения.
lifo
true
Последний пришёл — первый ушёл.
- Последний пришёл — первый ушёл. Если этот параметр установлен в true, пул соединений возвращает первое последнее используемое соединение (если в пуле имеются доступные неактивные соединения).
- Если этот параметр установлен в false, пул работает как очередь FIFO и получает соединения из пула неактивных экземпляров соединений в порядке их возврата.
poolPreparedStatements
false
Это определяет, будет ли применяться пул предобработки операторов в пуле соединений.
maxOpenPreparedStatements
N/A
Максимальное количество операторов, которое может быть выделено в пуле операторов одновременно. Отрицательное значение означает отсутствие ограничения.
Этот параметр также применяется к предобработанному пулу операторов. Когда пул операторов создаётся для каждого соединения, включаются предобработанные операторы, генерируемые следующим методом.
public PreparedStatement prepareStatement(String sql)public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)NOTE:Убедитесь, что соединения оставляют ресурсы для других операторов, задав maxOpenPreparedStatements значение меньше максимального количества курсоров.
accessToUnderlyingConnectionAllowed
false
Это определяет, может ли PoolGuard получить доступ к нижележащим соединениям.
removeAbandonedOnMaintenance
removeAbandonedOnBorrow
false
Удалять ли заброшенные соединения, которые были заброшены дольше периода, указанного в removeAbandonedTimout.
Если значение равно true, соединения, не использованные более чем removeAbandonedTimeout считаются заброшенными и удаляются.
Создание или выполнение операторов сбрасывает lastUsed свойство родительского соединения.
Установка этого параметра в true помогает восстанавливать соединения в приложениях с небольшим количеством операций записи.
removeAbandonedTimeout
300
Интервал ожидания для удаления отброшенного соединения, в секундах.
logAbandoned
false
Включать ли трассировку стека для отброшенных операторов или подключённого кода в приложении. При включённом параметре трассировки стека для отброшенных операторов и журналов, связанных с соединением, будет перезаписываться каждый раз при открытии соединения или создании оператора.
abandonedUsageTracking
false
When this parameter is set to true, пул соединений записывает трассировки стека каждый раз, когда вызывается метод на соединении из пула, сохраняя последнюю трассировку стека для облегчения отладки оставленных соединений.
NOTE:Setting this parameter to true will increase the overhead. Exercise caution when performing this operation.
fastFailValidation
false
Этот параметр относится к быстрому завершению проверочных операторов, если происходит фатальное исключение, без выполнения isValid() или запрос проверки. Фатальные исключения включают конкретные SQL_STATE коды.
- 57P01 (ADMIN SHUTDOWN)
- 57P02 (CRASH SHUTDOWN)
- 57P03 (CANNOT CONNECT NOW)
- 01002 (SQL92 disconnect error)
- JZ0C0 (Sybase disconnect error)
- JZ0C1 (Sybase disconnect error)
- Любой код SQL_STATE, начинающийся с "08"
Коды исключений необходимо перезаписать. Для деталей смотрите disconnectionSqlCodes.
disconnectionSqlCodes
N/A
Код исключения, который является кодом SQL_STATE, разделённым запятыми (,). Этот параметр действителен только когда fastFailValidation установлен в true.
jmxName
N/A
This parameter registers a DataSource as a JMX MBean with a specified name that adheres to the JMX object name syntax.
registerConnectionMBean
true
Нужно ли регистрировать и подключаться к JMX MBean.
- Включение removeAbandoned позволяет пулу соединений вернуть и повторно использовать отброшенное соединение. Это происходит, когда условия (getNumIdle() < 2) и (getNumActive() > getMaxTotal() - 3) выполнены.
Настройка пула соединений Hikari CP
- Скачать пакет драйвера JDBC. Для подробностей см Скачивание драйвера JDBC или ODBC.
- Скачать пакет драйвера HikariCP с https://mvnrepository.com/artifact/com.zaxxer/HikariCP/4.0.3.
- Скачать пакет драйвера SLF4J с https://www.slf4j.org/download.html.
- Добавьте пакеты драйверов JDBC, HikariCP и SLF4J в проект и настройте параметры, связанные с пулом подключений к базе данных.
Таблица 2 Параметры пула подключений Hikari CP Параметр
Значение по умолчанию
Описание
driverClassName
Введите значение org.postgresql.Driver.
Имя драйвера базы данных.
jdbcUrl
N/A
URL для подключения к базе данных.
username
N/A
Имя пользователя.
password
N/A
Пароль.
autoCommit
true
Определяет, следует ли автоматически отправлять транзакции, когда соединение возвращается в пул соединений.
connectionTimeout
30000
Максимальный интервал таймаута для получения соединений из пула соединений.
idleTimeout
60000
Максимальное время жизни простаивающего соединения. Этот параметр действует только когда значение minimumIdle меньше, чем maximumPoolSize.
- Если количество простаивающих соединений больше значения minimumIdle и время простоя соединения больше значения idleTimeout, соединение удаляется из пула соединений.
- 0 указывает отсутствие тайм‑аута.
keepaliveTime
0
Интервал проверки наличия неиспользуемых соединений, в миллисекундах. 0 указывает, что функция отключена.
maxLifetime
1800000
Максимальное время жизни соединения, в миллисекундах. 0 указывает отсутствие ограничения.
connectionTestQuery
N/A
Выражение запроса для проверки соединения.
minimumIdle
10
Минимальное количество неиспользуемых соединений. Для повышения производительности рекомендуется не задавать этот параметр. Размер пула соединений фиксирован.
maximumPoolSize
10
Максимальное количество соединений.
metricRegistry
N/A
Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.
Этот параметр указывает экземпляр Codahale/Dropwizard MetricRegistry, используемый пулом для записи различных метрик.
healthCheckRegistry
N/A
Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.
Этот параметр указывает экземпляр Codahale/Dropwizard HealthCheckRegistry, используемый пулом для записи информации о состоянии.
poolName
N/A
Имя пула соединений.
initializationFailTimeout
1
Определяет, не удаётся ли пулу соединений быстро инициализироваться.
- Если значение больше 0, система пытается получить соединение в течение указанного периода (connectionTimeout + initializationFailTimeout). Если не удалось, пул не включается, и генерируется исключение.
- Если значение равно 0, система пытается получить и проверить соединение. Если проверка не удалась, пул не включается.
- Если значение меньше 0, пул запускается без попытки инициализации соединения.
isolateInternalQueries
false
Нужно ли изолировать запросы HikariCP в транзакции. Этот параметр действует, когда autoCommit установлен в false.
allowPoolSuspension
false
Разрешить ли приостанавливать и возобновлять пул соединений через JMX. Когда пул соединений приостановлен, соединение не истекает до восстановления пула соединений.
Только для чтения
false
Является ли соединение только для чтения.
registerMbeans
false
Включить ли JMX.
catalog
N/A
База данных по умолчанию catalog.
connectionInitSql
N/A
SQL‑оператор, выполняемый после инициализации пула соединений.
transactionIsolation
N/A
Уровень изоляции транзакций по умолчанию.
validationTimeout
5000
Интервал тайм‑аута для обнаружения соединения. Значение должно быть больше значения connectionTimeout. Минимальное значение 250.
leakDetectionThreshold
0
Максимальная продолжительность, в течение которой соединение может быть выдано.
Минимальное значение — 2000 миллисекунд, используется для журналирования утечки соединения.
schema
N/A
База данных по умолчанию schema.
threadFactory
N/A
Это java.util.concurrent.ThreadFactory экземпляр, используемый пулом подключений для создания потоков. Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.
scheduledExecutor
N/A
The java.util.concurrent.ScheduledExecutorService экземпляр, используемый пулом подключений для выполнения запланированных задач. Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.
Настройка пула подключений Druid
- Загрузите пакет драйвера JDBC. Для получения подробной информации см Загрузка драйвера JDBC или ODBC.
Загрузите пакет драйвера Druid с https://druid.apache.org/downloads/.
- Добавьте пакеты драйверов JDBC и Druid в проект и настройте параметры, связанные с пулом подключений к базе данных.
Таблица 3 Параметры пула соединений Druid Параметр
Значение по умолчанию
Описание
url
N/A
URL для подключения к базе данных.
имя пользователя
N/A
Имя пользователя.
пароль
N/A
Пароль.
driverClassName
Введите значение org.postgresql.Driver.
Имя драйвера базы данных.
initialSize
0
Количество физических соединений, устанавливаемых при инициализации. Инициализация происходит, когда init метод вызывается явно или когда getConnection метод вызывается в первый раз.
maxActive
8
Максимальное количество соединений в пуле потоков.
minIdle
0
Минимальное количество бездействующих потоков в пуле. Druid периодически сканирует количество соединений. Если количество превышает указанный параметр, избыточные соединения закрываются. Если доступно меньше соединений, создаются новые. Этот параметр помогает управлять соединениями при больших объёмах запросов, хотя может занимать много времени.
connectTimeout
N/A
Интервал тайм‑аута для подключения к базе данных в миллисекундах.
socketTimeout
N/A
Интервал тайм‑аута сокета для подключения к базе данных в миллисекундах.
maxWait
-1
Время ожидания нового запроса, когда соединения в пуле соединений исчерпаны, в миллисекундах.
–1 указывает бесконечное ожидание до истечения таймаута.
poolPreparedStatements
false
Определяет, кэшировать ли preparedStatement, то есть PSCache. PSCache значительно повышает производительность базы данных, поддерживающей курсоры.
maxOpenPreparedStatements
N/A
Если PSCache включён, значение этого параметра должно быть больше 0.
Если значение больше 0, poolPreparedStatements будет автоматически установлено в true.
validationQuery
SELECT 1
SQL‑запрос, используемый для проверки того, является ли соединение действительным.
Если validationQuery равен null, то testOnBorrow, testOnReturn, и testWhileIdle параметры не вступают в силу, потому что эти три параметра используются для проверки достоверности соединения с базой данных путем выполнения SQL‑запроса, указанного в validationQuery.
testOnBorrow
N/A
При запросе соединения, validationQuery команда проверяет его достоверность. Эта конфигурация может снижать производительность, поэтому используйте её с осторожностью.
testOnReturn
N/A
Когда соединение возвращается, то validationQuery команда проверяет его корректность. Эта конфигурация также может влиять на производительность, поэтому используйте её с осторожностью.
testWhileIdle
true
Определяет, следует ли проверять соединение при запросе. Лучше всего установить этот параметр в true чтобы обеспечить безопасность без снижения производительности. Если время простоя превышает значение timeBetweenEvictionRunMills, запуская validationQuery команда для проверки корректности соединения не будет иметь эффекта.
timeBetweenEvictionRunsMillis
60s
Эта validationQuery команда проверяет действительность соединения. Если количество неактивных соединений превышает minIdle, лишние соединения закрываются. Если доступно меньше неактивных соединений, добавляются новые. Соединения, не использованные в течение времени, указанного в timeBetweenEvictionRunsMillis отключены.
Этот параметр также:
- Устанавливает интервал для потока Destroy, проверяющего соединения.
- Служит ссылкой для проверки testWhileIdle. Для получения подробностей см. описание testWhileIdle атрибут.
minEvictableIdleTimeMillis
30min
Максимальное время жизни неактивного соединения до удаления. Если время с последней активности превышает minEvictableIdleTimeMillis, соединение закрывается потоком Destroy.
ПРИМЕЧАНИЕ:Этот параметр конфликтует с timeBetweenEvictionRunsMillis параметр. Вы можете оставить этот параметр пустым.
connectionInitSqls
N/A
SQL‑запрос выполняется при инициализации физического соединения.
exceptionSorter
N/A
Когда база данных генерирует некоторые необратимые исключения, соединение отбрасывается.
фильтры
N/A
Этот параметр настраивает расширенный плагин с использованием алиаса. Тип атрибута — строка. Распространённые плагины включают фильтры, используемые для мониторинга и статистики:
- stat: статистика мониторинга
- log4j: запись журнала
- стена: предотвращение SQL injection
proxyFilters
N/A
Тип List<com.alibaba.druid,filter.Filter>. Вы можете настроить оба фильтр и proxyFilters.
removeAbandoned
false
Указывает, следует ли восстанавливать утечку соединений.
Когда getNumActive() подходы getMaxActive(), система освобождает недействительные соединения, не использованные в течение removeAbandonedTimeout период (по умолчанию 300 секунд). Соединения, превышающие этот тайм-аут, принудительно закрываются.
removeAbandonedTimeout
300s
Ограничение времени для Druid принудительно высвобождать соединения, в секундах. Druid принудительно высвободит соединение из пула после того, как пройдет указанное время с момента установления соединения, начиная с момента, когда программа получает соединение из пула.
logAbandoned
false
Нужно ли выводить лог при высвобождении утёкших соединений.
Этот параметр указывает, следует ли записывать информацию о стекe текущего потока в логи, когда removeAbandoned происходит.
removeAbandonedTimeoutMillis
5min
Интервал тайм-аута для высвобождения соединений. Если removeAbandoned установлен в true, Druid периодически проверяет, переполняется ли пул потоков. Если пул потоков не находится в рабочем состоянии и указанное время превышено, пул потоков восстанавливается.
maxEvictableIdleTimeMillis
7 часов
Максимальное время простоя. Значение по умолчанию — 7 часов.
maxPoolPrepareStatementPerConnectionSize
20
Максимальное количество SQL‑запросов, которые могут кэшироваться для каждого соединения.
keepAlive
false
Количество соединений minIdle, которые необходимо поддерживать при инициализации пула.
Если количество соединений падает ниже minIdle и время простоя превышает minEvictableIdleTimeMillis, the keepAlive операция выполняется для поддержания minIdle значение.
notFullTimeoutRetryCount
0
Количество попыток повторения, когда сумма количества арендованных соединений в пуле соединений и количества доступных соединений меньше максимально разрешённого количества соединений. Значение по умолчанию 0.
logSlowSql
false
Определяет, выводить ли медленные SQL‑запросы.
- Используйте пул соединений Druid, основываясь на следующем примере.
Создайте db.properties файл в ресурс директория.
# Database connection parametersurl=jdbc:postgresql://10.10.0.13:8000/gaussdbusername=userpassword=passvalidationQuery=select 1validationQueryTimeout=300#driverClassName=JDBC driver namedriverClassName=org.postgresql.Driver# Number of initialized connectionsinitialSize=1# Maximum number of connectionsmaxActive=20# Number of core threads. If the number of core threads is greater than this configured value, the threads are released.minIdle=10Пример кода:
import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import com.alibaba.druid.pool.DruidPooledConnection;import java.io.IOException;import java.io.InputStream;import java.sql.ResultSet;import java.sql.Statement;import java.util.Properties;public class TestDataSource {private static DruidDataSource dataSource;public static void main(String[] args) throws Exception {Properties properties = loadProperties();dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);dataSource.setTimeBetweenEvictionRunsMillis(50 * 1000);dataSource.setRemoveAbandoned(true);dataSource.setRemoveAbandonedTimeout(120);dataSource.setSocketTimeout(5000);dataSource.setConnectTimeout(5000);dataSource.setQueryTimeout(5);final DruidPooledConnection connection = dataSource.getConnection();final Statement statement = connection.createStatement();execute(statement);}public static void execute(Statement statement) {ResultSet resultSet = null;try {resultSet = statement.executeQuery("select 1");while (resultSet.next()) {String str = resultSet.getString(1);System.out.println("n1 :" + str);return;}} catch (Exception e) {e.printStackTrace();}}/*** Load the configuration file and obtain parameters from the configuration file.*/public static Properties loadProperties() {InputStream inputStream = TestDataSource.class.getClassLoader().getResourceAsStream("db.properties");Properties ps = new Properties();try {ps.load(inputStream);} catch (IOException e) {e.printStackTrace();}return ps;}}
- Контекст
- Настройка пула соединений DBCP 2
- Настройка пула соединений Hikari CP
- Настройка пула соединений Druid