«1. Обзор

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

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

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

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

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

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

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

3. Настройка c3p0 с помощью Hibernate

Давайте теперь посмотрим, как настроить существующее приложение 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... [email protected] [ ... 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... [email protected] [ ... new settings ... ]

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

5. Заключение

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

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

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