The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

Quarkus でデータソースを設定

統一された設定モデルを使用して、Java Database Connectivity (JDBC) および Reactive ドライバーのデータソースを定義します。

アプリケーションは、データソースを使用してリレーショナルデータベースにアクセスします。 Quarkus は、Java Database Connectivity (JDBC) および Reactive データベースドライバー用のデータソースを定義するための統一された設定モデルを提供します。

Quarkus は AgroalVert.x を使用して、JDBC とリアクティブドライバー用の高性能でスケーラブルなデータソース接続プーリングを提供します。 quarkus-jdbc-* および quarkus-reactive-*-client エクステンションは、ビルド時最適化を提供し、設定されたデータソースをセキュリティー、ヘルスチェック、メトリクスなどの Quarkus 機能と統合します。

リアクティブデータソースの消費と使用に関する詳細は、Quarkus Reactive SQL クライアント ガイドを参照してください。

さらに、JDBC データソースの消費と使用については、Quarkus Hibernate ORM ガイドを参照してください。

Quarkus での datasources の設定入門

基礎を理解しているユーザー向けに、このセクションではデータソースをすばやく設定するための概要とコードサンプルを提供します。

より高度な設定とその例については、リファレンス を参照してください。

開発モードでのゼロコンフィグセットアップ

Quarkus は Dev Services 機能を提供することでデータベース設定を簡素化し、テストや開発 (dev) モードでの実行においてゼロコンフィグでのデータベースセットアップを可能にします。 開発モードでは Dev Services を使用して Quarkus にデータベースを処理させる方法が推奨されますが、本番モードでは Quarkus の外部で管理されるデータベースを指す明示的なデータベース設定の詳細を記述します。

Dev Services を使用するには、 pom.xml ファイルに、希望するデータベースタイプに適したドライバーエクステンション ( jdbc-postgresql など) を追加します。 開発モードでは、明示的なデータベース接続の詳細を記述しない場合、Quarkus が自動的にデータベースのセットアップを行い、アプリケーションとデータベース間の接続を処理します。

ユーザーのクレデンシャルを提供すると、Quarkus はそれらを使用するようにデータベースを設定します。 これは、外部ツールを使用してデータベースに接続する場合に役立ちます。

この機能を使用するには、データベースの種類に応じて Docker または Podman コンテナーランタイムがインストールされていることを確認してください。 H2 などの特定のデータベースはインメモリモードで動作するため、コンテナーランタイムは必要ありません。

本番モードの実際の接続詳細の前に %prod. を付けて、それらが開発モードで適用されないようにします。 詳細は、「設定リファレンス」ガイドの プロファイル セクションを参照してください。

Dev Services の詳細については、 Dev Services の概要 を参照してください。

詳細およびオプション設定については、 Dev Services for databases を参照してください。

JDBC データソースの設定

  1. 選択したデータベースに適切な JDBC エクステンションを追加します。

    • quarkus-jdbc-db2

    • quarkus-jdbc-h2

    • quarkus-jdbc-mariadb

    • quarkus-jdbc-mssql

    • quarkus-jdbc-mysql

    • quarkus-jdbc-oracle

    • quarkus-jdbc-postgresql

  2. JDBC データソースの設定

    quarkus.datasource.db-kind=postgresql (1)
    quarkus.datasource.username=<your username>
    quarkus.datasource.password=<your password>
    
    quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/hibernate_orm_test
    quarkus.datasource.jdbc.max-size=16
    1 この設定値は、クラスパスに複数のデータベースエクステンションがある場合にのみ必要です。

使用可能なエクステンションが 1 つしかない場合、Quarkus はそれが正しいものであると見なします。 テストスコープにドライバーを追加すると、Quarkus は自動的にそのドライバーをテストに含めます。

JDBC 接続プールのサイズ調整

負荷ピーク時の過負荷からデータベースを保護するために、プールのサイズを適切に設定してデータベースの負荷を制限します。 最適なプールサイズは、並列アプリケーションのユーザー数やワークロードの性質など、多くの要因によって異なります。

プールサイズを低く設定しすぎると、接続を待つ間に一部のリクエストがタイムアウトする可能性があることに注意してください。

プールサイズ調整プロパティーの詳細は、JDBC 設定リファレンス セクションを参照してください。

Reactive データソースの設定

  1. 選択したデータベースに適切なリアクティブエクステンションを追加します。

    • quarkus-reactive-db2-client

    • quarkus-reactive-mssql-client

    • quarkus-reactive-mysql-client

    • quarkus-reactive-oracle-client

    • quarkus-reactive-pg-client

  2. リアクティブデータソースの設定

    quarkus.datasource.db-kind=postgresql (1)
    quarkus.datasource.username=<your username>
    quarkus.datasource.password=<your password>
    
    quarkus.datasource.reactive.url=postgresql:///your_database
    quarkus.datasource.reactive.max-size=20
    1 この設定値は、クラスパスに複数の Reactive ドライバーエクステンションがある場合にのみ必要です。

データソースの設定

以下のセクションでは、単一または複数のデータソースの設定について説明します。 簡略化のため、単一のデータソースをデフォルトの (無名の) データソースとして参照します。

単一のデータソースの設定

データソースは JDBC、リアクティブ、またはその両方の可能性があります。 これは、設定とプロジェクトエクステンションの選択に依存します。

  1. 以下の設定プロパティーでデータソースを定義します。ここで db-kind は接続先のデータベースプラットフォーム (例: h2) を定義します。

    quarkus.datasource.db-kind=h2

    Quarkus は、 db-kind データベースプラットフォームの値から JDBC ドライバークラスを導出します。

    この手順は、アプリケーションが複数のデータベースドライバーに依存している場合にのみ必要です。 アプリケーションが単一のドライバーを使用する場合、Quarkus はそのドライバーを自動的に検出します。

    Quarkus には現在、以下のデータベースの種類が組み込まれています。

    • DB2: db2

    • H2: h2

    • MariaDB: mariadb

    • Microsoft SQL Server: mssql

    • MySQL: mysql

    • Oracle: oracle

    • PostgreSQL: postgresqlpgsql、または pg

    • 組み込まれていない種類のデータベースを使用するには、 other を使用し、JDBC ドライバーを明示的に定義します。

      カスタムデータベースとドライバー で説明されているように、Quarkus アプリケーションでは JVM モードで任意の JDBC ドライバーを使用できます。 ただし、アプリケーションをネイティブ実行可能ファイルにコンパイルする場合、組み込みでないデータベースの種類を使用すると動作しない可能性が高いです。

      ネイティブ実行可能ファイルのビルドについては、利用可能な JDBC Quarkus エクステンションを使用するか、特定のドライバー用にカスタムエクステンションを提供することをお勧めします。

  2. クレデンシャルを定義するために、以下のプロパティーを設定します。

    quarkus.datasource.username=<your username>
    quarkus.datasource.password=<your password>

    また、データソースに クレデンシャルプロバイダー を使用することで、Vault からパスワードを取得することもできます。

これまでは、JDBC ドライバーとリアクティブドライバーのどちらを使用していても、設定は同じでした。 データベースの種類とクレデンシャルを定義した後は、使用するドライバーの種類に依存します。 JDBC とリアクティブドライバーを同時に使用することも可能です。

JDBC データソース

JDBC は最も一般的なデータベース接続パターンであり、通常、非リアクティブな Hibernate ORM と組み合わせて使用する場合に必要になります。

  1. JDBC データソースを使用するには、必要な依存関係を追加することから始めます。

    1. 組み込みの JDBC ドライバーで使用する場合は、以下のリストからリレーショナルデータベースドライバー用の Quarkus エクステンションを選択して追加します。

      • H2 - quarkus-jdbc-h2

        H2 データベースを「組み込みモード」で実行するように設定できます。

        統合テストに関する提案については、インメモリーデータベースを使用したテスト を参照してください。

      • DB2 - quarkus-jdbc-db2

      • MariaDB - quarkus-jdbc-mariadb

      • Microsoft SQL Server - quarkus-jdbc-mssql

      • MySQL - quarkus-jdbc-mysql

      • Oracle - quarkus-jdbc-oracle

      • PostgreSQL - quarkus-jdbc-postgresql

      • その他の JDBC エクステンション (SQLite およびその ドキュメント など) は、 Quarkiverse にあります。

        例えば、PostgreSQL ドライバーの依存関係を追加するには以下のようにします。

        ./mvnw quarkus:add-extension -Dextensions="jdbc-postgresql"

        組み込みの JDBC ドライバーエクステンションを追加すると、Quarkus は quarkus-agroal エクステンションも追加します。 Agroal は、組み込みおよびカスタムの JDBC ドライバーに JDBC 接続プールを提供します。 カスタム JDBC ドライバーを使用する場合は、 quarkus-agroal を明示的に追加してください。

    2. カスタム JDBC ドライバーと共に使用する場合は、リレーショナルデータベースドライバーのエクステンションと一緒に、 quarkus-agroal 依存関係をプロジェクトに追加します。

      ./mvnw quarkus:add-extension -Dextensions="agroal"

      別のデータベースの JDBC ドライバーを使用するには、ビルトインエクステンションのないデータベース、もしくは別のドライバーのあるデータベースを使用 してください。

  2. JDBC URL プロパティーを定義して、JDBC 接続を構成します。

    quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/hibernate_orm_test

    プロパティー名の jdbc 接頭辞に注意してください。 すべての JDBC 固有の設定プロパティーには jdbc 接頭辞が付きます。 リアクティブデータソースの場合、接頭辞は reactive です。

JDBC の設定に関する詳細は、JDBC URL 形式リファレンス および Quarkus エクステンションとデータベースドライバーリファレンス を参照してください。

カスタムデータベースとドライバー

Quarkus がデータベース用の JDBC エクステンションを提供していない場合、または OpenTelemetry 用などの別の JDBC ドライバーを使用する必要がある場合は、JDBC ドライバーを明示的に設定できます。

エクステンションがない場合、JDBC ドライバーは JVM モードで正しく動作することが期待されます。 ただし、アプリケーションをネイティブ実行可能ファイルにコンパイルする際には機能しない可能性が高いです。 ネイティブ実行可能ファイルをビルドするには、既存の Quarkus JDBC エクステンションを使用するか、ドライバー用の新しいエクステンションを提供してください。

JVM モードで組み込みサポートのないデータベースへのアクセスを定義する例。
quarkus.datasource.db-kind=other
quarkus.datasource.jdbc.driver=oracle.jdbc.driver.OracleDriver
quarkus.datasource.jdbc.url=jdbc:oracle:thin:@192.168.1.12:1521/ORCL_SVC
quarkus.datasource.username=scott
quarkus.datasource.password=tiger

JDBC 設定オプションや、接続プールサイズなどの他の側面の設定に関するすべての詳細については、JDBC 設定リファレンス セクションを参照してください。

データソースの消費

Hibernate ORM を使用すると、Hibernate レイヤーが自動的にデータソースを認識して使用します。

コード内でデータソースにアクセスするには、他の Bean と同様に以下のように取得します。

@Inject
AgroalDataSource defaultDataSource;

上記の例では、型は javax.sql.DataSource のサブタイプである AgroalDataSource です。 このため、 javax.sql.DataSource を注入型として使用することもできます。

Oracle に関する考慮事項

issue #36265 で文書化されているように、Oracle は接続を閉じる際にコミットされていないトランザクションを予期せずコミットします。 これは、Quarkus を停止したときに、進行中のトランザクションが不完全であってもコミットされる可能性があることを意味します。

この動作は予期しないものであり、データ損失につながる可能性があるため、インターセプターが接続を閉じる際に未完了のトランザクションをロールバックします。 ただし、XA トランザクションを使用している場合は、トランザクションマネージャーがロールバックを処理します。

3.18 で導入された動作がワークロードに問題を引き起こす場合は、 -Dquarkus-oracle-no-automatic-rollback-on-connection-close システムプロパティーを true に設定して無効にしてください。 必要に応じてこの動作を調整できるよう (より永続的な設定など)、 Issue トラッカー でユースケースを報告してください。

Reactive データソース

Quarkus は、リアクティブデータソースで使用するためのリアクティブクライアントをいくつか提供しています。

  1. 対応するエクステンションをアプリケーションに追加します。

    • DB2: quarkus-reactive-db2-client

    • MariaDB/MySQL: quarkus-reactive-mysql-client

    • Microsoft SQL Server: quarkus-reactive-mssql-client

    • Oracle: quarkus-reactive-oracle-client

    • PostgreSQL: quarkus-reactive-pg-client

      インストールされるエクステンションは、データソース設定で定義する quarkus.datasource.db-kind と一致している必要があります。

  2. ドライバーを追加した後、接続 URL を設定し、接続プールの適切なサイズを定義します。

    quarkus.datasource.reactive.url=postgresql:///your_database
    quarkus.datasource.reactive.max-size=20
リアクティブ接続プールのサイズ調整

負荷ピーク時の過負荷からデータベースを保護するために、データベースの負荷を制限するようにプールサイズを設定します。 適切なプールサイズは、同時ユーザー数やワークロードの種類などの要因によって異なります。

プールサイズを低く設定しすぎると、接続を待つ間に一部のリクエストがタイムアウトする可能性があることに注意してください。

プールサイズ調整プロパティーの詳細は、Reactive データソース設定リファレンス セクションを参照してください。

JDBC とリアクティブデータソースの同時利用

同じ db-kind に対して JDBC エクステンションとリアクティブデータソースエクステンションの両方を追加すると、Quarkus はデフォルトで JDBC データソースとリアクティブデータソースの両方を作成します。

  • JDBCreactive データソースを同時に使用するには、以下のようにします。

    %prod.quarkus.datasource.reactive.url=postgresql:///your_database
    %prod.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/hibernate_orm_test

JDBC データソースとリアクティブデータソースの両方を作成したくない場合は、以下の設定を使用します。

  • JDBC データソースを明示的に無効にするには、以下のようにします。

    quarkus.datasource.jdbc=false
  • リアクティブデータソースを明示的に無効にするには、以下のようにします。

    quarkus.datasource.reactive=false

    ほとんどの場合、JDBC ドライバーまたはリアクティブデータソースエクステンションのいずれか一方が存在するため、上記の設定はオプションになります。

複数のデータソースの設定

Hibernate ORM エクステンションは、設定プロパティーを使用した 永続化ユニット の定義をサポートしています。 各永続化ユニットについて、選択したデータソースを指定します。

複数のデータソースの定義は、単一のデータソースの定義と同じように機能しますが、1 つ重要な違いがあります。それは、各データソースに名前 (設定プロパティー) を指定する必要があることです。

以下の例では、3 つの異なるデータソースを提供しています。

  • デフォルトのもの

  • users という名前のデータソース

  • inventory という名前のデータソース

それぞれの設定。

quarkus.datasource.db-kind=h2
quarkus.datasource.username=username-default
quarkus.datasource.jdbc.url=jdbc:h2:mem:default
quarkus.datasource.jdbc.max-size=13

quarkus.datasource.users.db-kind=h2
quarkus.datasource.users.username=username1
quarkus.datasource.users.jdbc.url=jdbc:h2:mem:users
quarkus.datasource.users.jdbc.max-size=11

quarkus.datasource.inventory.db-kind=h2
quarkus.datasource.inventory.username=username2
quarkus.datasource.inventory.jdbc.url=jdbc:h2:mem:inventory
quarkus.datasource.inventory.jdbc.max-size=12

設定プロパティーに余分なセクションがあることに注意してください。 構文は quarkus.datasource.[optional name.][datasource property] となります。

データベースエクステンションを 1 つしかインストールしていない場合でも、Quarkus がそれらを検出できるように、名前付きデータソースには少なくとも 1 つのビルド時プロパティーを設定する必要があります。 ほとんどの場合、 db-kind を設定します。

Dev Services for Databases ガイドで説明されているように、Dev Services プロパティーを設定して名前付きデータソースを作成することもできます。

名前付きデータソース注入

複数のデータソースを設定する場合、各 DataSource には、データソース名を値として持つ io.quarkus.agroal.DataSource 修飾子も付与されます。

前のセクションで説明したように 3 つのデータソースを設定した後、それぞれのデータソースを以下のように注入します。

@Inject
AgroalDataSource defaultDataSource;

@Inject
@DataSource("users")
AgroalDataSource usersDataSource;

@Inject
@DataSource("inventory")
AgroalDataSource inventoryDataSource;

データソースをアクティブ化または非アクティブ化する

データソースがビルド時に設定され、その URL が実行時に設定されている場合、デフォルトでアクティブになります。 Quarkus はアプリケーションの起動時に、対応する JDBC 接続プールまたはリアクティブクライアントを起動します。

ランタイムにデータソースを非アクティブ化するには、次のいずれかを実行します。

  • quarkus.datasource[.optional name].jdbc.url または quarkus.datasource[.optional name].reactive.url を設定しないでください。

  • quarkus.datasource[.optional name].activefalse に設定します。

データソースがアクティブでない場合は、以下のようになります。

  • データソースは、アプリケーションの起動時にデータベースへの接続を試みません。

  • データソースは ヘルスチェック を行いません。

  • @Inject DataSource ds@Inject Pool pool など、データソースに関連する静的 CDI インジェクションポイントがある場合、アプリケーションの起動に失敗します。

  • CDI.getBeanContainer()Arc.instance() 、または注入された Instance<DataSource> などを介してデータソースを動的に取得すると、例外がスローされます。

  • データソースを消費する他の Quarkus エクステンションによって、アプリケーションの起動が失敗する可能性があります。

    この場合、それらの他のエクステンションも非アクティブ化する必要があります。 このシナリオの例については、Hibernate ORM ガイドの 永続化ユニットのアクティブ化/非アクティブ化 セクションを参照してください。 Hibernate ORM の場合、データソースが非アクティブなとき、Quarkus は永続化ユニットを非アクティブ化します。

この機能は、アプリケーションが実行時に事前定義されたセットから 1 つのデータソースを選択する必要がある場合に特に便利です。

実行時に選択できるように複数のデータソースを設定する例。
quarkus.datasource."pg".db-kind=postgres
quarkus.datasource."pg".active=false
quarkus.datasource."pg".jdbc.url=jdbc:postgresql:///your_database

quarkus.datasource."oracle".db-kind=oracle
quarkus.datasource."oracle".active=false
quarkus.datasource."oracle".jdbc.url=jdbc:oracle:thin:@localhost:1521/your_database

実行時quarkus.datasource."pg".active=true を設定すると PostgreSQL データソースのみが利用可能になります。 実行時に quarkus.datasource."oracle".active=true を設定すると Oracle データソースのみが利用可能になります。

カスタム設定プロファイル を使用すると、このセットアップを簡素化できます。 上記の構成に以下のプロファイル固有の設定を追加することで、 quarkus.profile を設定 して、実行時に永続化ユニットまたはデータソースを選択できます。 例えば、 quarkus.profile=prod,pgquarkus.profile=prod,oracle を使用します。

%pg.quarkus.hibernate-orm."pg".active=true
%pg.quarkus.datasource."pg".active=true
# Add any PostgreSQL-related runtime configuration here, prefixed with "%pg."

%oracle.quarkus.hibernate-orm."oracle".active=true
%oracle.quarkus.datasource."oracle".active=true
# Add any Oracle-related runtime configuration here, prefixed with "%oracle."

このセットアップでは、 アクティブ なデータソースのみがアクセスされるようにしてください。 これを実現するには、 @Any 修飾子を指定して InjectableInstance<DataSource> または InjectableInstance<Pool> を注入し、 getActive() を呼び出します。

import io.quarkus.arc.InjectableInstance;
@ApplicationScoped
public class MyConsumer {
    @Inject
    @Any
    InjectableInstance<DataSource> dataSource;

    public void doSomething() {
        DataSource activeDataSource = dataSource.getActive();
        // ...
    }
}

あるいは、デフォルトのデータソース用に CDI Bean プロデューサー を定義します。 この Bean プロデューサーは、アクティブな名前付きデータソースにリダイレクトします。 アプリケーションは、以下のようにデフォルトのデータソースを直接注入できるようになります。

public class MyProducer {
    @Inject
    @DataSource("pg")
    InjectableInstance<DataSource> pgDataSourceBean; (1)

    @Inject
    @DataSource("oracle")
    InjectableInstance<DataSource> oracleDataSourceBean;

    @Produces (2)
    @ApplicationScoped
    public DataSource dataSource() {
        if (pgDataSourceBean.getHandle().getBean().isActive()) { (3)
            return pgDataSourceBean.get();
        } else if (oracleDataSourceBean.getHandle().getBean().isActive()) { (3)
            return oracleDataSourceBean.get();
        } else {
            throw new RuntimeException("No active datasource!");
        }
    }
}

@ApplicationScoped
public class MyConsumer {
    @Inject
    DataSource dataSource; (4)

    public void doSomething() {
        // .. just use the injected datasource ...
    }
}
1 DataSourceAgroalDatasource を直接注入しないでください。 非アクティブな Bean を注入すると起動に失敗します。 代わりに InjectableInstance<DataSource> または InjectableInstance<AgroalDataSource> を注入します。
2 デフォルトのデータソースを定義するための CDI プロデューサーメソッドを宣言します。 これは、どちらがアクティブかに応じて、PostgreSQL または Oracle のいずれかを選択します。
3 Bean を取得する前に、その Bean がアクティブかどうかを確認します。
4 唯一のアクティブなデータソースを注入します。

単一のトランザクションで複数のデータソースを使用する

デフォルトでは、データソースの XA サポートは無効になっています。 したがって、1 つのトランザクションに含めることができるデータソースは 1 つだけです。 同じトランザクション内で複数の非 XA データソースにアクセスしようとすると、次のような例外が発生します。

...
Caused by: java.sql.SQLException: Exception in association of connection to existing transaction
        at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:130)
        ...
Caused by: java.sql.SQLException: Failed to enlist. Check if a connection from another datasource is already enlisted to the same transaction
        at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:121)
        ...

同じトランザクションで複数の JDBC データソースを使用できるようにするには、次のようにします。

  1. JDBC ドライバーが XA をサポートしていることを確認してください。 サポートされているすべての JDBC ドライバー はサポートしていますが、 その他の JDBC ドライバー はサポートしていない場合があります。

  2. データベースサーバーで XA が有効になるように設定されていることを確認してください。

  3. quarkus.datasource[.optional name].jdbc.transactionsxa に設定して、関連する各データソースに対して XA サポートを明示的に有効にします。

XA を使用すると、あるデータソースでのロールバックが、そのトランザクションに登録されている他のすべてのデータソースでのロールバックをトリガーします。

現時点では、リアクティブデータソースでの XA トランザクションはサポートされていません。

トランザクションにデータソース以外のリソースが含まれる場合は、それらが XA トランザクションをサポートしていないか、追加の設定が必要になる可能性があることに注意してください。

いずれかのデータソースで XA を有効にできない場合。

  • 1 つだけ を除くすべてのデータソースで XA を有効にすることは、 Last Resource Commit Optimization (LRCO) を通じて引き続きサポートされていることに注意してください。

  • あるデータソースのロールバックによって他のデータソースのロールバックをトリガーする必要がない場合は、コードを複数のトランザクションに分割することを検討してください。 そのためには、 (推奨される) QuarkusTransaction.requiringNew()/@Transactional(REQUIRES_NEW) 、または (より複雑なユースケースの場合は) UserTransaction を使用します。

他に解決策がなく、Quarkus 3.8 以前との互換性が必要な場合は、 quarkus.transaction-manager.unsafe-multiple-last-resourcesallow に設定して、複数の非 XA データソースにわたる安全でないトランザクション処理を有効にします。

このプロパティーを allow に設定すると、あるトランザクションのロールバックが最後の非 XA データソースにのみ適用され、他の非 XA データソースは既に変更をコミットしている可能性があります。 これにより、システムが不整合な状態になる可能性があります。

あるいは、同じ安全でない動作を許可しつつ、発生時に警告を出すようにします。

  • プロパティーを warn-each に設定すると、問題のあるトランザクション ごとに 警告がログに記録されます。

  • プロパティーを warn-first に設定すると、 最初の 問題のあるトランザクションに対して警告がログに記録されます。

この設定プロパティーの使用は推奨されず、将来的に削除される予定です。 これに従ってアプリケーションを更新してください。 ユースケース上、このオプションを維持する必要があると思われる場合は、 Quarkus トラッカー でその理由を説明する Issue を作成してください。

データソースの統合

データソースヘルスチェック

quarkus-smallrye-health エクステンションを使用する場合、 quarkus-agroal およびリアクティブクライアントエクステンションは、データソースを検証するための readiness probe ヘルスチェックを自動的に追加します。

アプリケーションのヘルス readiness エンドポイント (デフォルトは /q/health/ready ) にアクセスすると、データソースの検証ステータスに関する情報が得られます。 複数のデータソースがある場合は、すべてのデータソースがチェックされ、1 つでもデータソースの検証に失敗すると、ステータスが DOWN に変わります。

quarkus.datasource.health.enabled=false を設定することで、この動作を無効にできます。

特定のデータソースのみをヘルスチェックから除外するには、以下のようにします。

quarkus.datasource."datasource-name".health-exclude=true

データソースメトリクス

quarkus-micrometer エクステンションを追加すると、 quarkus-agroal はメトリクスレジストリーにデータソースメトリクスを公開できます。 これらのメトリクスを有効にするには、 quarkus.datasource.metrics.enabled=true を設定します。

公開されたメトリクスが値を報告するためには、Agroal が内部メトリクス収集を有効にする必要があります。 デフォルトでは、メトリクスエクステンションが存在し、 quarkus.datasource.metrics.enabledtrue に設定されている場合、Agroal はすべてのデータソースに対して内部メトリクス収集を有効にします。

特定のデータソースのメトリクスを無効にするには、 quarkus.datasource.jdbc.metrics.enabled=false を設定します。 名前付きデータソースの場合は、 quarkus.datasource.<datasource name>.jdbc.metrics.enabled=false を設定します。 この設定により、内部メトリクス収集が停止し、 /q/metrics エンドポイントでのデータソースメトリクスの公開が停止します。

デフォルトデータソースに対して明示的に内部メトリクス収集を有効にするには、 quarkus.datasource.jdbc.metrics.enabled=true を設定します。 名前付きデータソースに対して明示的に内部メトリクス収集を有効にするには、 quarkus.datasource.<datasource name>.jdbc.metrics.enabled=true を設定します。 これにより、メトリクスエクステンションを追加していない場合でも内部メトリクス収集が有効になります。 注入された AgroalDataSource インスタンスで dataSource.getMetrics() を呼び出すことで、収集されたメトリクスにプログラムでアクセスできます。

データソースのメトリクス収集が無効になっている場合、すべてのメトリクス値はゼロになります。

データソーストレース

データソースでトレースを使用するには、プロジェクトに quarkus-opentelemetry エクステンションを追加する必要があります。

トレースを有効にするために別のドライバーを宣言する必要はありません。 JDBC ドライバーを使用する場合は、 OpenTelemetry エクステンション内の指示 に従う必要があります。

すべてのトレースインフラストラクチャーが整っていても、データソーストレースはデフォルトでは有効になっていません。そのため、このプロパティーを設定して有効にする必要があります。

# enable tracing
quarkus.datasource.jdbc.telemetry=true

Narayana トランザクションマネージャーの統合

Narayana JTA エクステンションも利用可能な場合、統合は自動的に行われます。

transactions 設定プロパティーを設定することで、これをオーバーライドできます。

  • デフォルトの無名データソースの場合は quarkus.datasource.jdbc.transactions

  • 名前付きデータソースの場合は quarkus.datasource.<datasource-name>.jdbc.transactions

quarkus.datasource[.optional name].jdbc.transactions=xa を設定してデータソースが XA トランザクション用に設定され、 quarkus.transaction-manager.enable-recovery=true を使用してトランザクションリカバリーシステムが有効になっている場合、データソースは自動的にリカバリー対象として登録されます。 これは推奨される安全なデフォルトです。 quarkus.datasource.jdbc.enable-recovery=false または quarkus.datasource."datasource-name".jdbc.enable-recovery=false を設定することで、個別のデータソースに対してこの動作をオーバーライドできます。

この設定は、高度なユースケースであり、リカバリーが不要であることが確実な場合にのみ変更してください。 誤った設定は、リソースが無期限にロックされたままになるため、データ損失やデータの利用不能、あるいはその両方を引き起こす可能性があります。

詳細については、以下の 設定リファレンス セクションを参照してください。 JDBC を使用してデータベースにトランザクションログを保存しやすくする方法については、 Quarkus でのトランザクションの使用 ガイドの データソースに保存されるようにトランザクションログを設定する セクションを参照してください。

インメモリーデータベースを使用したテスト

データベースに対するテストの推奨されるアプローチは、本番環境の動作と可能な限り一致するテスト結果を得るために、本番環境と同じデータベースを使用することです。 Dev Services は、設定が不要で素早く起動できるため、このアプローチを簡素化します。

Dev Services もカスタムデータベースセットアップも不可能なシナリオでは、組み込みモードの H2 などの JVM ベースのデータベースを使用できます。

サポートと制限

H2 などの組み込みデータベースは JVM モードで動作します。

ネイティブモードでは、ネイティブイメージ内に H2 を埋め込むことは推奨されません。別のデータベースへのリモート接続を使用するか、Dev Services を使用してネイティブイメージの外部でデータベースを実行してください。

統合テストの実行

  1. 次の Maven コーディネートにある、追加ツールを提供するアーティファクトへの依存関係を追加します。

    • H2 の場合は io.quarkus:quarkus-test-h2

      データベースが JVM プロセスとして実行されている間、アプリケーションをネイティブ実行可能ファイルにコンパイルしてもテストを実行できます。

  2. JVM とネイティブ実行可能ファイルの両方でテストを実行するには、統合テストの任意のクラスに次のアノテーションを追加します。

    • @QuarkusTestResource(H2DatabaseTestResource.class)

      これにより、テスト実行の必要に応じて、テストスイートが別のプロセスでマネージドデータベースを起動および終了させることが保証されます。

      H2 の例
      package my.app.integrationtests.db;
      
      import io.quarkus.test.common.QuarkusTestResource;
      import io.quarkus.test.h2.H2DatabaseTestResource;
      
      @QuarkusTestResource(H2DatabaseTestResource.class)
      public class TestResources {
      }
  3. マネージドデータベースへの接続を設定します。

    quarkus.datasource.db-kind=h2
    quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test

リファレンス

共通データソース設定リファレンス

ビルド時に固定される設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Whether or not a health check is published in case the smallrye-health extension is present.

This is a global setting and is not specific to a datasource.

Environment variable: QUARKUS_DATASOURCE_HEALTH_ENABLED

Show more

boolean

true

Whether datasource metrics are published in case a metrics extension is present.

This is a global setting and is not specific to a datasource.

This is different from the quarkus.datasource."datasource name".jdbc.metrics.enabled property that needs to be set on the JDBC datasource level to enable collection of metrics for that datasource.

Environment variable: QUARKUS_DATASOURCE_METRICS_ENABLED

Show more

boolean

false

quarkus.datasource."datasource-name".db-kind

The kind of database we will connect to (e.g. h2, postgresql…​).

Environment variable: QUARKUS_DATASOURCE_DB_KIND

Show more

string

quarkus.datasource."datasource-name".db-version

The version of the database we will connect to (e.g. '10.0').

The version number set here should follow the same numbering scheme as the string returned by java.sql.DatabaseMetaData#getDatabaseProductVersion() for your database’s JDBC driver. This numbering scheme may be different from the most popular one for your database; for example Microsoft SQL Server 2016 would be version 13.

As a rule, the version set here should be as high as possible, but must be lower than or equal to the version of any database your application will connect to.

A high version will allow better performance and using more features (e.g. Hibernate ORM may generate more efficient SQL, avoid workarounds and take advantage of more database features), but if it is higher than the version of the database you want to connect to, it may lead to runtime exceptions (e.g. Hibernate ORM may generate invalid SQL that your database will reject).

Some extensions (like the Hibernate ORM extension) will try to check this version against the actual database version on startup, leading to a startup failure when the actual version is lower or simply a warning in case the database cannot be reached.

The default for this property is specific to each extension; the Hibernate ORM extension will default to the oldest version it supports.

Environment variable: QUARKUS_DATASOURCE_DB_VERSION

Show more

string

quarkus.datasource."datasource-name".health-exclude

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

By default, the health check includes all configured data sources (if it is enabled).

Environment variable: QUARKUS_DATASOURCE_HEALTH_EXCLUDE

Show more

boolean

false

quarkus.datasource."datasource-name".active

Whether this datasource should be active at runtime.

Environment variable: QUARKUS_DATASOURCE_ACTIVE

Show more

boolean

`true` if the URL is set, `false` otherwise

quarkus.datasource."datasource-name".username

The datasource username

Environment variable: QUARKUS_DATASOURCE_USERNAME

Show more

string

quarkus.datasource."datasource-name".password

The datasource password

Environment variable: QUARKUS_DATASOURCE_PASSWORD

Show more

string

quarkus.datasource."datasource-name".credentials-provider

The credentials provider name

Environment variable: QUARKUS_DATASOURCE_CREDENTIALS_PROVIDER

Show more

string

quarkus.datasource."datasource-name".credentials-provider-name

The credentials provider bean name.

This is a bean name (as in @Named) of a bean that implements CredentialsProvider. It is used to select the credentials provider bean when multiple exist. This is unnecessary when there is only one credentials provider available.

For Vault, the credentials provider bean name is vault-credentials-provider.

Environment variable: QUARKUS_DATASOURCE_CREDENTIALS_PROVIDER_NAME

Show more

string

Dev Services

デフォルト

quarkus.datasource."datasource-name".devservices.enabled

Whether this Dev Service should start with the application in dev mode or tests.

Dev Services are enabled by default unless connection configuration (e.g. the JDBC URL or reactive client URL) is set explicitly.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_ENABLED

Show more

boolean

quarkus.datasource."datasource-name".devservices.image-name

The container image name for container-based Dev Service providers.

This has no effect if the provider is not a container-based database, such as H2 or Derby.

Defaults depend on the configured datasource:

  • DB2: icr.io/db2_community/db2:12.1.0.0

  • MariaDB: docker.io/library/mariadb:12.1

  • Microsoft SQL Server: mcr.microsoft.com/mssql/server:2022-latest

  • MySQL: docker.io/library/mysql:9.5

  • Oracle Express Edition: docker.io/gvenzl/oracle-free:23-slim-faststart

  • PostgreSQL: docker.io/library/postgres:18

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_IMAGE_NAME

Show more

string

quarkus.datasource."datasource-name".devservices.container-env."environment-variable-name"

Environment variables that are passed to the container.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

Show more

Map<String,String>

quarkus.datasource."datasource-name".devservices.container-properties."property-key"

Generic properties that are passed for additional container configuration.

Properties defined here are database-specific and are interpreted specifically in each database dev service implementation.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_CONTAINER_PROPERTIES__PROPERTY_KEY_

Show more

Map<String,String>

quarkus.datasource."datasource-name".devservices.properties."property-key"

Generic properties that are added to the database connection URL.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_PROPERTIES__PROPERTY_KEY_

Show more

Map<String,String>

quarkus.datasource."datasource-name".devservices.port

Optional fixed port the dev service will listen to.

If not defined, the port will be chosen randomly.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_PORT

Show more

int

quarkus.datasource."datasource-name".devservices.command

The container start command to use for container-based Dev Service providers.

This has no effect if the provider is not a container-based database, such as H2 or Derby.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_COMMAND

Show more

string

quarkus.datasource."datasource-name".devservices.db-name

The database name to use if this Dev Service supports overriding it.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_DB_NAME

Show more

string

quarkus.datasource."datasource-name".devservices.username

The username to use if this Dev Service supports overriding it.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_USERNAME

Show more

string

quarkus.datasource."datasource-name".devservices.password

The password to use if this Dev Service supports overriding it.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_PASSWORD

Show more

string

quarkus.datasource."datasource-name".devservices.init-script-path

The paths to SQL scripts to be loaded from the classpath and applied to the Dev Service database.

This has no effect if the provider is not a container-based database, such as H2 or Derby.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_INIT_SCRIPT_PATH

Show more

文字列のリスト

quarkus.datasource."datasource-name".devservices.init-privileged-script-path

The paths to SQL scripts to be loaded from the classpath and applied to the Dev Service database using the SYS privileged user. Not all databases provide a privileged user. In these cases, the property is ignored. This has no effect if the provider is not a container-based database, such as H2 or Derby.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_INIT_PRIVILEGED_SCRIPT_PATH

Show more

文字列のリスト

quarkus.datasource."datasource-name".devservices.volumes."host-path"

The volumes to be mapped to the container.

The map key corresponds to the host location; the map value is the container location. If the host location starts with "classpath:", the mapping loads the resource from the classpath with read-only permission.

When using a file system location, the volume will be generated with read-write permission, potentially leading to data loss or modification in your file system.

This has no effect if the provider is not a container-based database, such as H2 or Derby.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_VOLUMES__HOST_PATH_

Show more

Map<String,String>

quarkus.datasource."datasource-name".devservices.reuse

Whether to keep Dev Service containers running after a dev mode session or test suite execution to reuse them in the next dev mode session or test suite execution.

Within a dev mode session or test suite execution, Quarkus will always reuse Dev Services as long as their configuration (username, password, environment, port bindings, …​) did not change. This feature is specifically about keeping containers running when Quarkus is not running to reuse them across runs.

This feature needs to be enabled explicitly in testcontainers.properties, may require changes to how you configure data initialization in dev mode and tests, and may leave containers running indefinitely, forcing you to stop and remove them manually. See this section of the documentation for more information.

This configuration property is set to true by default, so it is mostly useful to disable reuse, if you enabled it in testcontainers.properties but only want to use it for some of your Quarkus applications or datasources.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_REUSE

Show more

boolean

true

quarkus.datasource."datasource-name".devservices.show-logs

Whether the logs should be consumed by the JBoss logger.

This has no effect if the provider is not a container-based database, such as H2 or Derby.

Environment variable: QUARKUS_DATASOURCE_DEVSERVICES_SHOW_LOGS

Show more

boolean

false

JDBC 設定リファレンス

ビルド時に固定される設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Activate or disable the dev ui page.

Environment variable: QUARKUS_DATASOURCE_DEV_UI_ENABLED

Show more

boolean

true

Allow sql queries in the Dev UI page

Environment variable: QUARKUS_DATASOURCE_DEV_UI_ALLOW_SQL

Show more

boolean

false

Append this to the select done to fetch the table values. eg: LIMIT 100 or TOP 100

Environment variable: QUARKUS_DATASOURCE_DEV_UI_APPEND_TO_DEFAULT_SELECT

Show more

string

Allowed database host. By default, only localhost is allowed. Any provided host here will also be allowed. You can use the special value * to allow any DB host.

Environment variable: QUARKUS_DATASOURCE_DEV_UI_ALLOWED_DB_HOST

Show more

string

quarkus.datasource."datasource-name".jdbc

If we create a JDBC datasource for this datasource.

Environment variable: QUARKUS_DATASOURCE_JDBC

Show more

boolean

true

quarkus.datasource."datasource-name".jdbc.driver

The datasource driver class name

Environment variable: QUARKUS_DATASOURCE_JDBC_DRIVER

Show more

string

quarkus.datasource."datasource-name".jdbc.transactions

Whether we want to use regular JDBC transactions, XA, or disable all transactional capabilities.

When enabling XA you will need a driver implementing javax.sql.XADataSource.

Environment variable: QUARKUS_DATASOURCE_JDBC_TRANSACTIONS

Show more

enabledIntegrate the JDBC Datasource with the JTA TransactionManager of Quarkus. This is the default., xaSimilarly to enabled, also enables integration with the JTA TransactionManager of Quarkus, but enabling XA transactions as well. Requires a JDBC driver implementing javax.sql.XADataSource, disabledDisables the Agroal integration with the Narayana TransactionManager. This is typically a bad idea, and is only useful in special cases\: make sure to not use this without having a deep understanding of the implications.

enabledIntegrate the JDBC Datasource with the JTA TransactionManager of Quarkus. This is the default.

quarkus.datasource."datasource-name".jdbc.telemetry

Enable OpenTelemetry JDBC instrumentation.

Environment variable: QUARKUS_DATASOURCE_JDBC_TELEMETRY

Show more

boolean

false

quarkus.datasource."datasource-name".jdbc.metrics.enabled

Enable metrics collection for this datasource.

Environment variable: QUARKUS_DATASOURCE_JDBC_METRICS_ENABLED

Show more

boolean

quarkus.datasource."datasource-name".jdbc.url

The datasource URL

Environment variable: QUARKUS_DATASOURCE_JDBC_URL

Show more

string

quarkus.datasource."datasource-name".jdbc.initial-size

The initial size of the pool. Usually you will want to set the initial size to match at least the minimal size, but this is not enforced so to allow for architectures which prefer a lazy initialization of the connections on boot, while being able to sustain a minimal pool size after boot.

Environment variable: QUARKUS_DATASOURCE_JDBC_INITIAL_SIZE

Show more

int

quarkus.datasource."datasource-name".jdbc.min-size

The datasource pool minimum size

Environment variable: QUARKUS_DATASOURCE_JDBC_MIN_SIZE

Show more

int

0

quarkus.datasource."datasource-name".jdbc.max-size

The datasource pool maximum size

Environment variable: QUARKUS_DATASOURCE_JDBC_MAX_SIZE

Show more

int

50

quarkus.datasource."datasource-name".jdbc.background-validation-interval

The interval at which we validate idle connections in the background.

Set to 0 to disable background validation.

Environment variable: QUARKUS_DATASOURCE_JDBC_BACKGROUND_VALIDATION_INTERVAL

Show more

Duration 

2M

quarkus.datasource."datasource-name".jdbc.foreground-validation-interval

Perform foreground validation on connections that have been idle for longer than the specified interval.

Environment variable: QUARKUS_DATASOURCE_JDBC_FOREGROUND_VALIDATION_INTERVAL

Show more

Duration 

quarkus.datasource."datasource-name".jdbc.login-timeout

Maximum time to wait while attempting to connect to a database. The actual implementation of login timeout could be different in various drivers. (e.g. driver could only cover the authentication and not the entire connection creation phase)

Environment variable: QUARKUS_DATASOURCE_JDBC_LOGIN_TIMEOUT

Show more

Duration 

By default, there is no login timeout set.

quarkus.datasource."datasource-name".jdbc.acquisition-timeout

The timeout before cancelling the acquisition of a new connection

Environment variable: QUARKUS_DATASOURCE_JDBC_ACQUISITION_TIMEOUT

Show more

Duration 

5S

quarkus.datasource."datasource-name".jdbc.leak-detection-interval

The interval at which we check for connection leaks.

Environment variable: QUARKUS_DATASOURCE_JDBC_LEAK_DETECTION_INTERVAL

Show more

Duration 

This feature is disabled by default.

quarkus.datasource."datasource-name".jdbc.idle-removal-interval

The interval at which we try to remove idle connections.

Environment variable: QUARKUS_DATASOURCE_JDBC_IDLE_REMOVAL_INTERVAL

Show more

Duration 

5M

quarkus.datasource."datasource-name".jdbc.max-lifetime

The max lifetime of a connection.

Environment variable: QUARKUS_DATASOURCE_JDBC_MAX_LIFETIME

Show more

Duration 

By default, there is no restriction on the lifespan of a connection.

quarkus.datasource."datasource-name".jdbc.transaction-isolation-level

The transaction isolation level.

Environment variable: QUARKUS_DATASOURCE_JDBC_TRANSACTION_ISOLATION_LEVEL

Show more

undefined, none, read-uncommitted, read-committed, repeatable-read, serializable

quarkus.datasource."datasource-name".jdbc.extended-leak-report

Collect and display extra troubleshooting info on leaked connections.

Environment variable: QUARKUS_DATASOURCE_JDBC_EXTENDED_LEAK_REPORT

Show more

boolean

false

quarkus.datasource."datasource-name".jdbc.flush-on-close

Allows connections to be flushed upon return to the pool. It’s not enabled by default.

Environment variable: QUARKUS_DATASOURCE_JDBC_FLUSH_ON_CLOSE

Show more

boolean

false

quarkus.datasource."datasource-name".jdbc.detect-statement-leaks

When enabled, Agroal will be able to produce a warning when a connection is returned to the pool without the application having closed all open statements. This is unrelated with tracking of open connections. Disable for peak performance, but only when there’s high confidence that no leaks are happening.

Environment variable: QUARKUS_DATASOURCE_JDBC_DETECT_STATEMENT_LEAKS

Show more

boolean

true

quarkus.datasource."datasource-name".jdbc.new-connection-sql

Query executed when first using a connection.

Environment variable: QUARKUS_DATASOURCE_JDBC_NEW_CONNECTION_SQL

Show more

string

quarkus.datasource."datasource-name".jdbc.validation-query-sql

Query executed to validate a connection.

Environment variable: QUARKUS_DATASOURCE_JDBC_VALIDATION_QUERY_SQL

Show more

string

quarkus.datasource."datasource-name".jdbc.validation-query-timeout

The timeout for the connection validation query

Environment variable: QUARKUS_DATASOURCE_JDBC_VALIDATION_QUERY_TIMEOUT

Show more

Duration 

quarkus.datasource."datasource-name".jdbc.validate-on-borrow

Forces connection validation prior to acquisition (foreground validation) regardless of the idle status.

Because of the overhead of performing validation on every call, it’s recommended to rely on default idle validation instead, and to leave this to false.

Environment variable: QUARKUS_DATASOURCE_JDBC_VALIDATE_ON_BORROW

Show more

boolean

false

quarkus.datasource."datasource-name".jdbc.pooling-enabled

Disable pooling to prevent reuse of Connections. Use this when an external pool manages the life-cycle of Connections.

Environment variable: QUARKUS_DATASOURCE_JDBC_POOLING_ENABLED

Show more

boolean

true

quarkus.datasource."datasource-name".jdbc.enable-recovery

Whether to enable recovery for this datasource.

Normally a transaction manager will call xa_recover () on an XA connection during recovery to obtain a list of transaction branches that are currently in a prepared or heuristically completed state. However, it can happen that multiple XA connections connect to the same datasource which would all return the same set of branches and for reasons of improved performance only one should be used for recover() calls. The default value for this configuration property is true because when there is only one connection it is vital for data consistency that the connection is able to report its list of prepared or heuristically completed branches.

Environment variable: QUARKUS_DATASOURCE_JDBC_ENABLE_RECOVERY

Show more

boolean

true

quarkus.datasource."datasource-name".jdbc.transaction-requirement

Require an active transaction when acquiring a connection. Recommended for production. WARNING: Some extensions acquire connections without holding a transaction for things like schema updates and schema validation. Setting this setting to STRICT may lead to failures in those cases.

Environment variable: QUARKUS_DATASOURCE_JDBC_TRANSACTION_REQUIREMENT

Show more

off, warn, strict

quarkus.datasource."datasource-name".jdbc.additional-jdbc-properties."property-key"

Other unspecified properties to be passed to the JDBC driver when creating new connections.

Environment variable: QUARKUS_DATASOURCE_JDBC_ADDITIONAL_JDBC_PROPERTIES__PROPERTY_KEY_

Show more

Map<String,String>

quarkus.datasource."datasource-name".jdbc.telemetry.enabled

Enable OpenTelemetry JDBC instrumentation.

Environment variable: QUARKUS_DATASOURCE_JDBC_TELEMETRY_ENABLED

Show more

boolean

false if quarkus.datasource.jdbc.telemetry=false and true if quarkus.datasource.jdbc.telemetry=true

quarkus.datasource."datasource-name".jdbc.enable-metrics

This property is deprecated.

Enable datasource metrics collection. If unspecified, collecting metrics will be enabled by default if a metrics extension is active.

Please use quarkus-micrometer and the quarkus.datasource.metrics.enabled property

Environment variable: QUARKUS_DATASOURCE_JDBC_ENABLE_METRICS

Show more

boolean

期間フォーマットについて

期間の値を書くには、標準の java.time.Duration フォーマットを使います。 詳細は Duration#parse() Java API documentation を参照してください。

数字で始まる簡略化した書式を使うこともできます:

  • 数値のみの場合は、秒単位の時間を表します。

  • 数値の後に ms が続く場合は、ミリ秒単位の時間を表します。

その他の場合は、簡略化されたフォーマットが解析のために java.time.Duration フォーマットに変換されます:

  • 数値の後に hms が続く場合は、その前に PT が付けられます。

  • 数値の後に d が続く場合は、その前に P が付けられます。

JDBC URL リファレンス

サポートされている各データベースには、固有の JDBC URL 設定オプションがあります。以下のセクションでは各 JDBC URL について説明し、公式ドキュメントへのリンクを提供します。

DB2

jdbc:db2://<serverName>[:<portNumber>]/<databaseName>[:<key1>=<value>;[<key2>=<value2>;]]

jdbc:db2://localhost:50000/MYDB:user=dbadm;password=dbadm;

URL 構文と追加のサポートオプションの詳細については、 公式ドキュメント を参照してください。

H2

jdbc:h2:{ {.|mem:}[name] | [file:]fileName | {tcp|ssl}:[//]server[:port][,server2[:port]]/name }[;key=value…​]

jdbc:h2:tcp://localhost/~/test, jdbc:h2:mem:myDB

H2 は、組み込みモードまたはサーバーモードで実行できるデータベースです。ファイルストレージを使用することも、完全にメモリー内で実行することも可能です。上記の通り、これらすべてのオプションが利用可能です。

詳細は 公式ドキュメント を参照してください。

MariaDB

jdbc:mariadb:[replication:|failover:|sequential:|aurora:]//<hostDescription>[,<hostDescription>…​]/[database][?<key1>=<value1>[&<key2>=<value2>]] hostDescription:: <host>[:<portnumber>] または address=(host=<host>)[(port=<portnumber>)][(type=(master|slave))]

jdbc:mariadb://localhost:3306/test

詳細は 公式ドキュメント を参照してください。

Microsoft SQL server

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks

詳細は 公式ドキュメント を参照してください。

MySQL

jdbc:mysql:[replication:|failover:|sequential:|aurora:]//<hostDescription>[,<hostDescription>…​]/[database][?<key1>=<value1>[&<key2>=<value2>]] hostDescription:: <host>[:<portnumber>] または address=(host=<host>)[(port=<portnumber>)][(type=(master|slave))]

jdbc:mysql://localhost:3306/test

詳細は 公式ドキュメント を参照してください。

MySQL の制限事項

アプリケーションをネイティブイメージにコンパイルする場合、MySQL Connector/J インテグレーションには以下の制限が適用されます。

  • Quarkus は、ネイティブモードで動作しないため、Java Management Extensions (JMX) のサポートを無効にします。

  • Quarkus は、ネイティブモードで動作しないため、Oracle Cloud Infrastructure (OCI) インテグレーションを無効にします。

  • Quarkus は MySQL Connector/J の OpenTelemetry インテグレーションを無効にし、代わりに Agroal インテグレーションを利用します。

    MySQL Connector/J の OpenTelemetry インテグレーションが必要な場合は、 quarkus.datasource.jdbc.additional-jdbc-properties.openTelemetry=PREFERRED を設定して明示的に有効にしてください。詳細は MySQL Connector/J ドキュメント を参照してください。

    このオプションを有効にし、かつ quarkus-opentelemetry エクステンションを追加すると、アプリケーションの起動に失敗し、 java.lang.IllegalStateException: GlobalOpenTelemetry.set has already been called. エラーが発生することがあります。

Oracle

jdbc:oracle:driver_type:@database_specifier

jdbc:oracle:thin:@localhost:1521/ORCL_SVC

詳細は 公式ドキュメント を参照してください。

PostgreSQL

jdbc:postgresql:[//][host][:port][/database][?key=value…​]

jdbc:postgresql://localhost/test

各パートのデフォルトは以下の通りです。

host

localhost

port

5432

database

ユーザー名と同じ名前

追加パラメーターの詳細については、 公式ドキュメント を参照してください。

Quarkus エクステンションとデータベースドライバーのリファレンス

次の表は、組み込みの db-kind の値、対応する Quarkus エクステンション、およびそれらのエクステンションで使用される JDBC ドライバーをリストしています。

組み込みのデータソースの種類のいずれかを使用する場合、JDBC および Reactive ドライバーは、これらの表の値に一致するように自動的に解決されます。

Table 1. データベースプラットフォームの種類と JDBC ドライバーのマッピング
データベースの種類 Quarkus エクステンション ドライバー

db2

quarkus-jdbc-db2

  • JDBC: com.ibm.db2.jcc.DB2Driver

  • XA: com.ibm.db2.jcc.DB2XADataSource

h2

quarkus-jdbc-h2

  • JDBC: org.h2.Driver

  • XA: org.h2.jdbcx.JdbcDataSource

mariadb

quarkus-jdbc-mariadb

  • JDBC: org.mariadb.jdbc.Driver

  • XA: org.mariadb.jdbc.MariaDbDataSource

mssql

quarkus-jdbc-mssql

  • JDBC: com.microsoft.sqlserver.jdbc.SQLServerDriver

  • XA: com.microsoft.sqlserver.jdbc.SQLServerXADataSource

mysql

quarkus-jdbc-mysql

  • JDBC: com.mysql.cj.jdbc.Driver

  • XA: com.mysql.cj.jdbc.MysqlXADataSource

oracle

quarkus-jdbc-oracle

  • JDBC: oracle.jdbc.driver.OracleDriver

  • XA: oracle.jdbc.xa.client.OracleXADataSource

postgresql

quarkus-jdbc-postgresql

  • JDBC: org.postgresql.Driver

  • XA: org.postgresql.xa.PGXADataSource

Table 2. データベースの種類と Reactive ドライバーのマッピング
データベースの種類 Quarkus エクステンション ドライバー

oracle

reactive-oracle-client

io.vertx.oracleclient.spi.OracleDriver

mysql

reactive-mysql-client

io.vertx.mysqlclient.spi.MySQLDriver

mssql

reactive-mssql-client

io.vertx.mssqlclient.spi.MSSQLDriver

postgresql

reactive-pg-client

io.vertx.pgclient.spi.PgDriver

db2

reactive-db2-client

io.vertx.db2client.spi.DB2Driver

この自動解決はほとんどの場合に適用されるため、ドライバーの設定は不要です。

Reactive データソース設定リファレンス

ビルド時に固定された設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

quarkus.datasource."datasource-name".reactive

If we create a Reactive datasource for this datasource.

Environment variable: QUARKUS_DATASOURCE_REACTIVE

Show more

boolean

true

quarkus.datasource."datasource-name".reactive.cache-prepared-statements

Whether prepared statements should be cached on the client side.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_CACHE_PREPARED_STATEMENTS

Show more

boolean

true for PostgreSQL/MySQL/MariaDB/Db2, false otherwise

quarkus.datasource."datasource-name".reactive.url

The datasource URLs.

If multiple values are set, this datasource will create a pool with a list of servers instead of a single server. The pool uses round-robin load balancing for server selection during connection establishment. Note that certain drivers might not accommodate multiple values in this context.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_URL

Show more

文字列のリスト

quarkus.datasource."datasource-name".reactive.max-size

The datasource pool maximum size.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MAX_SIZE

Show more

int

20

quarkus.datasource."datasource-name".reactive.event-loop-size

When a new connection object is created, the pool assigns it an event loop.

When #event-loop-size is set to a strictly positive value, the pool assigns as many event loops as specified, in a round-robin fashion. By default, the number of event loops configured or calculated by Quarkus is used. If #event-loop-size is set to zero or a negative value, the pool assigns the current event loop to the new connection.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_EVENT_LOOP_SIZE

Show more

int

quarkus.datasource."datasource-name".reactive.trust-all

Whether all server certificates should be trusted.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_ALL

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.trust-certificate-pem

PEM Trust config is disabled by default.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_PEM

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.trust-certificate-pem.certs

Comma-separated list of the trust certificate files (Pem format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_PEM_CERTS

Show more

文字列のリスト

quarkus.datasource."datasource-name".reactive.trust-certificate-jks

JKS config is disabled by default.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_JKS

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.trust-certificate-jks.path

Path of the key file (JKS format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_JKS_PATH

Show more

string

quarkus.datasource."datasource-name".reactive.trust-certificate-jks.password

Password of the key file.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_JKS_PASSWORD

Show more

string

quarkus.datasource."datasource-name".reactive.trust-certificate-pfx

PFX config is disabled by default.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_PFX

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.trust-certificate-pfx.path

Path to the key file (PFX format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_PFX_PATH

Show more

string

quarkus.datasource."datasource-name".reactive.trust-certificate-pfx.password

Password of the key.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_TRUST_CERTIFICATE_PFX_PASSWORD

Show more

string

quarkus.datasource."datasource-name".reactive.key-certificate-pem

PEM Key/cert config is disabled by default.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_PEM

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.key-certificate-pem.keys

Comma-separated list of the path to the key files (Pem format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_PEM_KEYS

Show more

文字列のリスト

quarkus.datasource."datasource-name".reactive.key-certificate-pem.certs

Comma-separated list of the path to the certificate files (Pem format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_PEM_CERTS

Show more

文字列のリスト

quarkus.datasource."datasource-name".reactive.key-certificate-jks

JKS config is disabled by default.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_JKS

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.key-certificate-jks.path

Path of the key file (JKS format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_JKS_PATH

Show more

string

quarkus.datasource."datasource-name".reactive.key-certificate-jks.password

Password of the key file.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_JKS_PASSWORD

Show more

string

quarkus.datasource."datasource-name".reactive.key-certificate-pfx

PFX config is disabled by default.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_PFX

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.key-certificate-pfx.path

Path to the key file (PFX format).

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_PFX_PATH

Show more

string

quarkus.datasource."datasource-name".reactive.key-certificate-pfx.password

Password of the key.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_KEY_CERTIFICATE_PFX_PASSWORD

Show more

string

quarkus.datasource."datasource-name".reactive.reconnect-attempts

The number of reconnection attempts when a pooled connection cannot be established on first try.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_RECONNECT_ATTEMPTS

Show more

int

0

quarkus.datasource."datasource-name".reactive.reconnect-interval

The interval between reconnection attempts when a pooled connection cannot be established on first try.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_RECONNECT_INTERVAL

Show more

Duration 

1S

quarkus.datasource."datasource-name".reactive.hostname-verification-algorithm

The hostname verification algorithm to use in case the server’s identity should be checked. Should be HTTPS, LDAPS or NONE. NONE is the default value and disables the verification.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_HOSTNAME_VERIFICATION_ALGORITHM

Show more

string

NONE

quarkus.datasource."datasource-name".reactive.idle-timeout

The maximum time a connection remains unused in the pool before it is closed.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_IDLE_TIMEOUT

Show more

Duration 

no timeout

quarkus.datasource."datasource-name".reactive.max-lifetime

The maximum time a connection remains in the pool, after which it will be closed upon return and replaced as necessary.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MAX_LIFETIME

Show more

Duration 

no timeout

quarkus.datasource."datasource-name".reactive.shared

Set to true to share the pool among datasources. There can be multiple shared pools distinguished by name, when no specific name is set, the __vertx.DEFAULT name is used.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_SHARED

Show more

boolean

false

quarkus.datasource."datasource-name".reactive.name

Set the pool name, used when the pool is shared among datasources, otherwise ignored.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_NAME

Show more

string

quarkus.datasource."datasource-name".reactive.additional-properties."property-key"

Other unspecified properties to be passed through the Reactive SQL Client directly to the database when new connections are initiated.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_ADDITIONAL_PROPERTIES__PROPERTY_KEY_

Show more

Map<String,String>

期間フォーマットについて

期間の値を書くには、標準の java.time.Duration フォーマットを使います。 詳細は Duration#parse() Java API documentation を参照してください。

数字で始まる簡略化した書式を使うこともできます:

  • 数値のみの場合は、秒単位の時間を表します。

  • 数値の後に ms が続く場合は、ミリ秒単位の時間を表します。

その他の場合は、簡略化されたフォーマットが解析のために java.time.Duration フォーマットに変換されます:

  • 数値の後に hms が続く場合は、その前に PT が付けられます。

  • 数値の後に d が続く場合は、その前に P が付けられます。

Reactive DB2 設定

ビルド時に固定された設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Datasources

デフォルト

quarkus.datasource."datasource-name".reactive.db2.ssl

Whether SSL/TLS is enabled.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_DB2_SSL

Show more

boolean

false

Reactive MariaDB/MySQL 固有の設定

ビルド時に固定された設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Additional named datasources

デフォルト

quarkus.datasource."datasource-name".reactive.mysql.charset

Charset for connections.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_CHARSET

Show more

string

quarkus.datasource."datasource-name".reactive.mysql.collation

Collation for connections.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_COLLATION

Show more

string

quarkus.datasource."datasource-name".reactive.mysql.ssl-mode

Desired security state of the connection to the server.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_SSL_MODE

Show more

disabled, preferred, required, verify-ca, verify-identity

disabled

quarkus.datasource."datasource-name".reactive.mysql.connection-timeout

Connection timeout in seconds

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_CONNECTION_TIMEOUT

Show more

int

quarkus.datasource."datasource-name".reactive.mysql.authentication-plugin

The authentication plugin the client should use. By default, it uses the plugin name specified by the server in the initial handshake packet.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_AUTHENTICATION_PLUGIN

Show more

default, mysql-clear-password, mysql-native-password, sha256-password, caching-sha2-password

default

quarkus.datasource."datasource-name".reactive.mysql.pipelining-limit

The maximum number of inflight database commands that can be pipelined. By default, pipelining is disabled.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_PIPELINING_LIMIT

Show more

int

quarkus.datasource."datasource-name".reactive.mysql.use-affected-rows

Whether to return the number of rows matched by the WHERE clause in UPDATE statements, instead of the number of rows actually changed.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MYSQL_USE_AFFECTED_ROWS

Show more

ブーリアン

false

Reactive Microsoft SQL サーバー固有の設定

ビルド時に固定された設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Datasources

デフォルト

quarkus.datasource."datasource-name".reactive.mssql.packet-size

The desired size (in bytes) for TDS packets.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MSSQL_PACKET_SIZE

Show more

int

quarkus.datasource."datasource-name".reactive.mssql.ssl

Whether SSL/TLS is enabled.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_MSSQL_SSL

Show more

boolean

false

Reactive Oracle 固有の設定

ビルド時に固定された設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Datasources

デフォルト

Reactive PostgreSQL 固有の設定

ビルド時に固定された設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能

Configuration property

デフォルト

Datasources

デフォルト

quarkus.datasource."datasource-name".reactive.postgresql.pipelining-limit

The maximum number of inflight database commands that can be pipelined.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_POSTGRESQL_PIPELINING_LIMIT

Show more

int

quarkus.datasource."datasource-name".reactive.postgresql.ssl-mode

SSL operating mode of the client.

Environment variable: QUARKUS_DATASOURCE_REACTIVE_POSTGRESQL_SSL_MODE

Show more

disable, allow, prefer, require, verify-ca, verify-full

disable

quarkus.datasource."datasource-name".reactive.postgresql.use-layer7-proxy

Level 7 proxies can load balance queries on several connections to the actual database. When it happens, the client can be confused by the lack of session affinity and unwanted errors can happen like ERROR: unnamed prepared statement does not exist (26000). See Using a level 7 proxy

Environment variable: QUARKUS_DATASOURCE_REACTIVE_POSTGRESQL_USE_LAYER7_PROXY

Show more

boolean

false

Reactive データソース URL リファレンス

DB2

db2://[user[:[password]]@]host[:port][/database][?<key1>=<value1>[&<key2>=<value2>]]

db2://dbuser:secretpassword@database.server.com:50000/mydb

現在、クライアントは以下のパラメーターキーをサポートしています。

  • host

  • port

  • user

  • password

  • database

接続 URL でパラメーターを設定すると、デフォルトのプロパティーが上書きされます。

Microsoft SQL server

sqlserver://[user[:[password]]@]host[:port][/database][?<key1>=<value1>[&<key2>=<value2>]]

sqlserver://dbuser:secretpassword@database.server.com:1433/mydb

現在、クライアントは以下のパラメーターキーをサポートしています。

  • host

  • port

  • user

  • password

  • database

接続 URL でパラメーターを設定すると、デフォルトのプロパティーが上書きされます。

MySQL / MariaDB

mysql://[user[:[password]]@]host[:port][/database][?<key1>=<value1>[&<key2>=<value2>]]

mysql://dbuser:secretpassword@database.server.com:3211/mydb

現在、クライアントは以下のパラメーターキーをサポートしています (大文字と小文字を区別しません)。

  • host

  • port

  • user

  • password

  • schema

  • socket

  • useAffectedRows

接続 URL でパラメーターを設定すると、デフォルトのプロパティーが上書きされます。

Oracle

EZConnect 形式

oracle:thin:@[[protocol:]//]host[:port][/service_name][:server_mode][/instance_name][?connection properties]

oracle:thin:@mydbhost1:5521/mydbservice?connect_timeout=10sec

TNS エイリアス形式

oracle:thin:@<alias_name>[?connection properties]

oracle:thin:@prod_db?TNS_ADMIN=/work/tns/

PostgreSQL

postgresql://[user[:[password]]@]host[:port][/database][?<key1>=<value1>[&<key2>=<value2>]]

postgresql://dbuser:secretpassword@database.server.com:5432/mydb

現在、クライアントは以下をサポートしています。

  • 以下のパラメーターキー。

    • host

    • port

    • user

    • password

    • dbname

    • sslmode

  • 次のような追加プロパティー。

    • application_name

    • fallback_application_name

    • search_path

    • options

接続 URL でパラメーターを設定すると、デフォルトのプロパティーが上書きされます。

関連コンテンツ