1.2. データソースを設定する
次のセクションでは、単一または複数データソースの設定について説明します。説明をシンプルにするために、単一データソースをデフォルトデータソース (名前なし) とします。
1.2.1. 単一データソースを設定する リンクのコピーリンクがクリップボードにコピーされました!
データソースは、JDBC データソース、リアクティブ、またはその両方になります。これは、プロジェクトエクステンションの設定と選択に応じて決定されます。
次の設定プロパティーを使用してデータソースを定義します。この場合の
db-kindは、接続先のデータベースプラットフォーム (例:h2) を定義します。quarkus.datasource.db-kind=h2
quarkus.datasource.db-kind=h2Copy to Clipboard Copied! Toggle word wrap Toggle overflow Quarkus は、
db-kindデータベースプラットフォーム属性に指定された値から、使用するべき JDBC ドライバークラスを推定します。注記この手順は、アプリケーションが複数のデータベースドライバーに依存する場合にのみ必要です。アプリケーションが単一のドライバーで動作する場合、ドライバーは自動的に検出されます。
Quarkus には現在、次の種類のビルトインデータベースがあります。
-
DB2:
db2 -
Derby:
derby -
H2:
h2 -
MariaDB:
mariadb -
Microsoft SQL Server:
mssql -
MySQL:
mysql -
Oracle:
oracle -
PostgreSQL:
postgresql、pgsqlまたはpg ビルトインではない種類のデータベースを使用する場合は
otherを使用し、JDBC ドライバーを明示的に定義します。注記他のデータベースを使用する で説明されているように、JVM モードの Quarkus アプリケーションでは任意の JDBC ドライバーを使用できます。ただし、ビルトイン以外の種類のデータベースを使用すると、アプリケーションをネイティブ実行可能ファイルにコンパイルする際に機能しない可能性が高くなります。
ネイティブ実行可能ファイルのビルドの場合、利用可能な JDBC Quarkus エクステンションを使用するか、使用する特定のドライバー用のカスタムエクステンションを提供することが推奨されます。
-
DB2:
次のプロパティーを設定して認証情報を定義します。
quarkus.datasource.username=<your username> quarkus.datasource.password=<your password>
quarkus.datasource.username=<your username> quarkus.datasource.password=<your password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow データソースの 認証情報プロバイダーを使用 して、Vault からパスワードを取得することもできます。
これまでは、JDBC とリアクティブドライバーのどちらを使用しているかにかかわらず、設定は同じでした。データベースの種類と認証情報の定義以外は、使用しているドライバーの種類により異なります。JDBC とリアクティブドライバーは、同時に使用できます。
1.2.1.1. JDBC データソース リンクのコピーリンクがクリップボードにコピーされました!
JDBC は最も一般的なデータベース接続パターンであり、通常は非リアクティブな Hibernate ORM と組み合わせて使用する場合に必要です。
JDBC データソースを使用する場合は、まず必要な依存関係を追加します。
ビルトイン JDBC ドライバーで使用する場合は、以下のリストからリレーショナルデータベースドライバーの Quarkus エクステンションを選択して追加します。
-
Derby -
jdbc-derby H2 -
jdbc-h2注記H2 データベースと Derby データベースは、"組み込みモード" で実行するように設定できます。ただし、Derby エクステンションでは、組み込みデータベースエンジンのネイティブ実行可能ファイルへのコンパイルはサポートされていません。
結合テストに関する提案事項については、in-memory データベースを使用してテストする を参照してください。
-
DB2 -
jdbc-db2 -
MariaDB -
jdbc-mariadb -
Microsoft SQL Server -
jdbc-mssql -
MySQL -
jdbc-mysql -
Oracle -
jdbc-oracle -
PostgreSQL -
jdbc-postgresql 他の JDBC エクステンション (SQLite やその ドキュメント など) は、Quarkiverse にあります。
たとえば、PostgreSQL ドライバーの依存関係を追加するには、以下を実行します。
./mvnw quarkus:add-extension -Dextensions="jdbc-postgresql"
./mvnw quarkus:add-extension -Dextensions="jdbc-postgresql"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ビルトイン JDBC ドライバーエクステンションを使用すると、Agroal エクステンションが自動的に組み込まれます。これは、カスタムおよびビルトインの JDBC ドライバーに適用できる JDBC 接続プール実装です。ただし、カスタムドライバーの場合は Agroal を明示的に追加する必要があります。
-
Derby -
カスタム JDBC ドライバーで使用するには、リレーショナルデータベースドライバーのエクステンションとともに
quarkus-agroal依存関係をプロジェクトに追加します。./mvnw quarkus:add-extension -Dextensions="agroal"
./mvnw quarkus:add-extension -Dextensions="agroal"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のデータベースの JDBC ドライバーを使用するには、ビルトインエクステンションがない、または別のドライバーがあるデータベースを使用 します。
JDBC URL プロパティーを定義して JDBC 接続を設定します。
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/hibernate_orm_test
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/hibernate_orm_testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記プロパティー名の接頭辞
jdbcに注意してください。JDBC 固有のすべての設定プロパティーには、接頭辞としてjdbcが付いています。リアクティブデータソースの場合、接頭辞はreactiveです。
JDBC の設定の詳細は、JDBC URL フォーマットのリファレンス および Quarkus エクステンションとデータベースドライバーのリファレンス を参照してください。
1.2.1.1.1. カスタムデータベースとドライバー リンクのコピーリンクがクリップボードにコピーされました!
JDBC ドライバーを使用して、Quarkus がエクステンションを提供しないデータベースに接続する必要がある場合は、代わりにカスタムドライバーを使用できます。たとえば、プロジェクトで OpenTracing JDBC ドライバーを使用している場合です。
エクステンションがなければ、ドライバーは JVM モードで実行されている Quarkus アプリケーションで正常に動作します。しかし、アプリケーションをネイティブ実行可能ファイルにコンパイルする際に、ドライバーが機能しない可能性があります。ネイティブ実行可能ファイルを作成する予定がある場合は、既存の JDBC Quarkus エクステンションを使用するか、ドライバー用にエクステンションを提供してください。
OpenTracing ドライバーを使用した例:
quarkus.datasource.jdbc.driver=io.opentracing.contrib.jdbc.TracingDriver
quarkus.datasource.jdbc.driver=io.opentracing.contrib.jdbc.TracingDriver
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
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 設定リファレンス セクションを参照してください。
1.2.1.1.2. データソースを消費する リンクのコピーリンクがクリップボードにコピーされました!
Hibernate ORM を使用すると、Hibernate レイヤーが自動的にデータソースを取得して使用します。
データソースへの in-code アクセスでは、次のように他の Bean としてデータソースを取得する必要があります。
@Inject AgroalDataSource defaultDataSource;
@Inject
AgroalDataSource defaultDataSource;
上記の例のタイプは AgroalDataSource、つまり javax.sql.DataSource サブタイプです。そのため、注入されたタイプとして javax.sql.DataSource も使用できます。
1.2.1.2. リアクティブデータソース リンクのコピーリンクがクリップボードにコピーされました!
Quarkus では、リアクティブデータソースで使用できるリアクティブクライアントがいくつか提供されています。
対応するエクステンションをアプリケーションに追加します。
-
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と一致する必要があります。
-
DB2:
ドライバーを追加した後、接続 URL を設定し、接続プールの適切なサイズを定義します。
quarkus.datasource.reactive.url=postgresql:///your_database quarkus.datasource.reactive.max-size=20
quarkus.datasource.reactive.url=postgresql:///your_database quarkus.datasource.reactive.max-size=20Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.1.2.1. リアクティブ接続プールのサイズ調整 リンクのコピーリンクがクリップボードにコピーされました!
負荷のピーク時の過負荷からデータベースを保護するには、データベースの負荷にスロットリングを適用できるようプールサイズを適切に設定します。適切なサイズは、並列アプリケーションユーザーの数やワークロードの性質など、多くの要因により異なります。
プールサイズの設定が小さすぎると、接続の待機中に一部のリクエストがタイムアウトになる可能性があることに注意してください。
プールサイズ調整プロパティーの詳細は、リアクティブデータソース設定リファレンス セクションを参照してください。
1.2.1.3. JDBC とリアクティブデータソースの同時使用 リンクのコピーリンクがクリップボードにコピーされました!
JDBC エクステンション (と Agroal) および特定の種類のデータベースを処理するリアクティブデータソースエクステンションが含まれている場合、デフォルトで両方が作成されます。
JDBC データソースを明示的に無効にするには、以下を実行します。
quarkus.datasource.jdbc=false
quarkus.datasource.jdbc=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow リアクティブデータソースを明示的に無効にするには、以下を実行します。
quarkus.datasource.reactive=false
quarkus.datasource.reactive=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントほとんどの場合、JDBC ドライバーとリアクティブデータソースエクステンションは、両方ではなくいずれか一方のみ存在するため、上記の設定はオプションです。
1.2.2. 複数のデータソースを設定する リンクのコピーリンクがクリップボードにコピーされました!
Hibernate ORM エクステンションは、設定プロパティーを使用した 永続化ユニット の定義をサポートします。永続ユニットごとに、選択したデータソースを参照できます。
複数のデータソースを定義することは、単一のデータソースを定義するのと同じように機能しますが、重要な相違点として名前 (設定キー) を定義する必要があります。
次の例では、3 つの異なるデータソースを示しています。
- デフォルトのデータソース
-
usersという名前のデータソース -
inventoryという名前のデータソース
それぞれの設定は次のとおりです。
設定キーに追加のセクションがあることに注意してください。構文は quarkus.datasource.[optional name.][datasource property] です。
データベースエクステンションが 1 つだけインストールされている場合でも、Quarkus がそれを検出できるように、名前付きデータベースは少なくとも1 つのビルドタイムプロパティーを指定する必要があります。通常これは db-kind プロパティーですが、Dev Services for Databases ガイドに従って、Dev Services プロパティーを指定して名前付きデータソースを作成することもできます。
1.2.2.1. 名前付きデータソースの注入 リンクのコピーリンクがクリップボードにコピーされました!
複数のデータソースを使用する場合、各 DataSource には、データソースの名前を値として持つ io.quarkus.agroal.DataSource 修飾子もあります。
前のセクションで説明したプロパティーを使用して 3 つの異なるデータソースを設定し、それぞれを次のように注入します。