1. 概要

Oracleは、大規模な実稼働環境で最も人気のあるデータベースの1つです。 したがって、Spring開発者として、これらのデータベースを使用する必要があることは非常に一般的です。

このチュートリアルでは、この統合を行う方法について説明します。

2. データベース

もちろん、最初に必要なのはデータベースです。 インストールされていない場合は、 Oracle Database SoftwareDownloadsで利用可能な任意のデータベースを取得してインストールできます。 ただし、インストールを実行したくない場合は、Docker用のOracleデータベースイメージをビルドすることもできます。

この場合、 Oracle Database 12cリリース2(12.2.0.2) StandardEditionDockerイメージを使用します。 その結果、これにより、コンピューターに新しいソフトウェアをインストールする必要がなくなります。

3. 接続プール

これで、データベースを着信接続用に準備できました。 次に、Springで接続プールを実行するいくつかの異なる方法を学びましょう。

3.1. HikariCP

Springとの接続プールの最も簡単な方法は、自動構成を使用することです。 spring-boot-starter-jdbc 依存関係には、優先プーリングデータソースとしてHikariCPが含まれています。 したがって、 pom.xml を調べると、次のことがわかります。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

spring-boot-starter-data-jpa 依存関係には、spring-boot-starter-jdbc依存関係が一時的に含まれています。

これで、構成application.propertiesファイルに追加するだけで済みます。

# OracleDB connection settings
spring.datasource.url=jdbc:oracle:thin:@//localhost:11521/ORCLPDB1
spring.datasource.username=books
spring.datasource.password=books
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

# HikariCP settings
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.poolName=HikariPoolBooks

# JPA settings
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.hibernate.use-new-id-generator-mappings=false
spring.jpa.hibernate.ddl-auto=create

ご覧のとおり、3つの異なるセクション構成設定があります。

  • OracleDB接続設定セクションでは、いつものようにJDBC接続プロパティを構成しました。
  • HikariCP設定セクションでは、HikariCP接続プールを構成します。 高度な構成が必要な場合は、HikariCP構成プロパティリストを確認する必要があります。
  • JPA設定セクションは、Hibernateを使用するための基本的な構成です。

必要なのはそれだけです。 簡単なことではありませんか?

3.2. TomcatおよびCommonsDBCP2接続プール

SpringはそのパフォーマンスのためにHikariCPを推奨しています一方、SpringBoot自動構成アプリケーションでTomcatおよびCommonsDBCP2もサポートします。

HikariCPを使おうとします。 使用できない場合は、Tomcatプーリングを使用しようとします。 どちらも使用できない場合は、CommonsDBCP2を使用しようとします。

使用する接続プールを指定することもできます。 その場合、application.propertiesファイルに新しいプロパティを追加する必要があります。

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

特定の設定を構成する必要がある場合は、それらのプレフィックスを使用できます。

  • spring.datasource.hikari。*(HikariCP構成の場合)
  • spring.datasource.tomcat。*Tomcatプーリング構成用
  • CommonsDBC2構成のspring.datasource.dbcp2。*

そして、実際には、spring。datasource.typeを他のDataSource実装に設定できます。 上記の3つである必要はありません。

ただし、その場合は、すぐに使用できる基本的な構成になります。いくつかの高度な構成が必要になる場合が多くあります。 それらのいくつかを見てみましょう。

3.3. Oracle Universal Connection Pooling

高度な構成を使用する場合は、UCPデータソースを宣言し、残りのプロパティをapplication.propertiesファイルに設定できます。 UCPのバージョン21.1.0.0の時点では、これが最も簡単な方法です。

JDBC用のOracleユニバーサル接続プール(UCP)は、JDBC接続をキャッシュするためのフル機能の実装を提供します。 新しい接続を作成する代わりに、接続を再利用します。 また、プールの動作をカスタマイズするための一連のプロパティも提供します。

UCPを使用する場合は、次のMaven依存関係を追加する必要があります。

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
</dependency>
<dependency>
    <groupId>com.oracle.database.ha</groupId>
    <artifactId>ons</artifactId>
</dependency>
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ucp</artifactId>
</dependency>

これで、構成をapplication.propertiesファイルに追加するだけで済みます。

# UCP settings
spring.datasource.type=oracle.oracleucp.jdbc.UCPDataSource
spring.datasource.oracleucp.connection-factory-class-name=oracle.jdbc.pool.OracleDataSource 
spring.datasource.oracleucp.sql-for-validate-connection=select * from dual 
spring.datasource.oracleucp.connection-pool-name=UcpPoolBooks 
spring.datasource.oracleucp.initial-pool-size=5 
spring.datasource.oracleucp.min-pool-size=5 
spring.datasource.oracleucp.max-pool-size=10

上記の例では、いくつかのプールプロパティをカスタマイズしました。

  • spring .datasource.oracleucp.initial-pool-size は、プールが開始された後に作成される使用可能な接続の数を指定します
  • spring .datasource.oracleucp.min-pool-size は、プールが維持している使用可能で借用された接続の最小数を指定します。
  • spring .datasource.oracleucp.max-pool-size は、プールが維持している使用可能で借用された接続の最大数を指定します

さらに構成プロパティを追加する必要がある場合は、 UCPDataSourceJavaDocまたは開発者ガイドを確認する必要があります。

4. 古いバージョンのOracle

Oracle9iや10gなどの11.2より前のバージョンでは、Oracleのユニバーサル接続プールを使用する代わりにOracleDataSourceを作成する必要があります。

OracleDataSource インスタンスでは、setConnectionCachingEnabledを介して接続キャッシュをオンにします。

@Configuration
@Profile("oracle")
public class OracleConfiguration {
    @Bean
    public DataSource dataSource() throws SQLException {
        OracleDataSource dataSource = new OracleDataSource();
        dataSource.setUser("books");
        dataSource.setPassword("books");
        dataSource.setURL("jdbc:oracle:thin:@//localhost:11521/ORCLPDB1");
        dataSource.setFastConnectionFailoverEnabled(true);
        dataSource.setImplicitCachingEnabled(true);
        dataSource.setConnectionCachingEnabled(true);
        return dataSource;
    }
}

上記の例では、接続プール用の OracleDataSource を作成し、いくつかのパラメーターを構成しました。 OracleDataSourceJavaDocで構成可能なすべてのパラメーターを確認できます。

5. 結論

現在、Springを使用してOracleデータベース接続プールを構成するのは簡単です。

自動構成を使用してプログラムでそれを行う方法を見てきました。 SpringはHikariCPの使用を推奨していますが、他のオプションも利用できます。 注意して、現在のニーズに合った適切な実装を選択する必要があります。

そして、いつものように、完全な例はGitHubにあります。