Перейти к основному содержимому

Использование c3p0 с Hibernate

· 3 мин. чтения

1. Обзор

Установить соединения с базой данных довольно дорого. Пул соединений с базой данных — хорошо зарекомендовавший себя способ снизить эти расходы.

В этом руководстве мы обсудим, как использовать c3p0 с Hibernate для объединения соединений.

2. Что такое c3p0?

c3p0 — это библиотека Java, предоставляющая удобный способ управления соединениями с базой данных .

Короче говоря, это достигается путем создания пула соединений. Он также эффективно выполняет очистку Statements и ResultSets после использования. Эта очистка необходима для оптимизации использования ресурсов и предотвращения взаимоблокировок, которых можно избежать.

Эта библиотека легко интегрируется с различными традиционными драйверами JDBC. Кроме того, он предоставляет слой для адаптации драйверов JDBC на основе DriverManager к более новой схеме javax.sql.DataSource .

А поскольку Hibernate поддерживает подключение к базам данных через JDBC, использовать Hibernate и c3p0 вместе просто.

3. Настройка c3p0 с гибернацией

Давайте теперь посмотрим, как настроить существующее приложение Hibernate для использования c3p0 в качестве диспетчера соединений с базой данных.

3.1. Зависимости Maven

Во- первых, нам сначала нужно добавить зависимость maven hibernate-c3p0 :

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.3.6.Final</version>
</dependency>

В Hibernate 5 достаточно просто добавить указанную выше зависимость, чтобы включить c3p0. Это справедливо до тех пор, пока не указан другой менеджер пула соединений JDBC.

Поэтому после того, как мы добавим зависимость, мы можем запустить наше приложение и проверить логи:

Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@34d0bdb9 [ ... default settings ... ]

Если используется другой менеджер пула соединений JDBC, мы можем заставить наше приложение использовать c3p0. Нам просто нужно установить provider_class в C3P0ConnectionProvider в нашем файле свойств:

hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider

3.2. Свойства пула соединений

В конце концов, нам нужно будет переопределить конфигурацию по умолчанию. Мы можем добавить пользовательские свойства в файл hibernate.cfg.xml :

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.acquire_increment">5</property>
<property name="hibernate.c3p0.timeout">1800</property>

Точно так же файл hibernate.properties может содержать те же настройки:

hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.acquire_increment=5
hibernate.c3p0.timeout=1800

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

Свойство max_size указывает максимальное количество подключений, которые он может поддерживать в любой момент времени. По умолчанию он будет поддерживать максимум 15 подключений .

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

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

Мы можем проверить новые настройки пула, снова проверив журналы:

Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@b0ad7778 [ ... new settings ... ]

Это основные свойства пула соединений. Кроме того, другие свойства конфигурации можно найти в официальном руководстве .

5. Вывод

В этой статье мы обсудили, как использовать c3p0 с Hibernate. Мы рассмотрели некоторые общие свойства конфигурации и добавили c3p0 в тестовое приложение.

Для большинства сред мы рекомендуем использовать диспетчер пула соединений, например c3p0 или HikariCP, вместо традиционных драйверов JDBC.

Как обычно, полный исходный код этого туториала доступен на GitHub .