Hibernateでc3p0を使う

1概要

データベース接続を確立するのはかなり費用がかかります。データベースhttps://www.baeldung.com/java-connection-pooling[connection pooling]は、この支出を減らすための確立された方法です。

このチュートリアルでは、Hibernateでhttps://www.mchange.com/projects/c3p0/[c3p0]を使用して接続をプールする方法について説明します。

2 c3p0とは何ですか?

  • c3p0は データベース接続を管理するための便利な方法を提供する** Javaライブラリです。

要するに、それは接続のプールを作成することによってこれを達成します。また、使用後の __Statement sおよび ResultSet __sのクリーンアップも効果的に処理されます。このクリーンアップは、リソース使用量が最適化され、回避可能なデッドロックが発生しないようにするために必要です。

  • このライブラリは、従来のさまざまなJDBCドライバとシームレスに統合されています** さらに、DriverManagerベースのJDBCドライバを新しい __javax.sql.DataSource __schemeに適応させるための層を提供します。

また、HibernateはJDBCを介したデータベースへの接続をサポートしているため、Hibernateとc3p0を一緒に使用するのは簡単です。

3 Hibernate を使ったc3p0の設定

データベース接続マネージャとしてc3p0を使用するように既存のHibernateアプリケーションを設定する方法を見てみましょう。

3.1. Mavenの依存関係

まず、https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0[ hibernate-c3p0 ]maven依存関係を追加する必要があります。

<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__に設定するだけです。

[source,text,gutter:,true]

hibernate.connection.provider__class=org.hibernate.connection.C3P0ConnectionProvider

====  **  3.2. 接続プールのプロパティ**

最終的には、デフォルト設定を上書きする必要があります。 __hibernate.cfg.xml__ファイルにカスタムプロパティを追加できます。

[source,xml,gutter:,true]

<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__ファイルに同じ設定を含めることができます。

[source,text,gutter:,true]

hibernate.c3p0.min size=5 hibernate.c3p0.max size=20 hibernate.c3p0.acquire__increment=5 hibernate.c3p0.timeout=1800

__min__size__プロパティは、常に維持する必要がある接続の最小数を指定します。 ** デフォルトでは、少なくとも3つの接続を維持します** 。この設定はプールの初期サイズも定義します。

__max__size__プロパティは、一度に維持できる接続の最大数を指定します。 ** デフォルトでは、最大15接続を維持します。

__acquire__increment__プロパティは、プールで使用可能な接続がなくなった場合に取得を試みる接続数を指定します。デフォルトでは、3つの新しい接続を取得しようとします。

__timeout__プロパティは、未使用の接続が破棄されるまで保持される秒数を指定します。 ** デフォルトでは、接続はプールから期限切れになることはありません。

ログをもう一度確認して、新しいプール設定を確認できます。

[source,text,gutter:,true]

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 …​]----

これらは基本的な接続プールのプロパティです。さらに、他の設定プロパティはhttps://www.mchange.com/projects/c3p0/#configuration__properties[公式ガイド]にあります。

5結論

この記事では、Hibernateでc3p0を使用する方法について説明しました。一般的な設定プロパティをいくつか調べて、テストアプリケーションにc3p0を追加しました。

ほとんどの環境では、従来のJDBCドライバの代わりにc3p0やhttps://www.baeldung.com/hikaricp[HikariCP]などの接続プールマネージャを使用することをお勧めします。

いつも通り、このチュートリアルの完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/hibernate5[GitHub]にあります。