1.6. 高度な設定マッピング
次に記載する高度なマッピングの手順は、Red Hat build of Quarkus 固有のエクステンションであり、MicroProfile Config 仕様の範囲には含まれません。
1.6.1. @ConfigMapping を使用してインターフェイスにアノテーションを付ける リンクのコピーリンクがクリップボードにコピーされました!
関連する複数の設定値を個別に注入する代わりに、@io.smallrye.config.ConfigMapping アノテーションを使用して設定プロパティーをグループ化します。次の手順では、Quarkus config-quickstart プロジェクトで @ConfigMapping アノテーションを使用する方法を説明します。
前提条件
-
config-quickstartプロジェクトを作成している。 -
プロジェクトの
application.propertiesファイルにgreeting.messageプロパティーおよびgreeting.nameプロパティーを定義している。
手順
プロジェクト内の
GreetingResource.javaファイルで、次の例に示す内容が含まれていることを確認します。@ConfigPopertiesアノテーションを使用して、別の設定ソースからこのクラスに設定プロパティーを注入するには、java.util.Optionalおよびorg.eclipse.microprofile.config.inject.ConfigPropertyパッケージをインポートする必要があります。GreetingResource.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow src/main/java/org/acme/configディレクトリーにGreetingConfiguration.javaファイルを作成します。そのファイルに、ConfigMappingとOptionalのインポートステートメントを追加します。GreetingConfiguration.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次に示すとおり、
@Injectアノテーションを使用してGreetingConfigurationインスタンスをGreetingResourceクラスに注入します。注記この抜粋は、
config-quickstartプロジェクトの初期バージョンにある、@ConfigPropertyアノテーションを持つ 3 つのフィールドを置き換えます。GreetingResource.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 開発モードでアプリケーションをコンパイルして起動します。
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要クラスプロパティーの値を指定しない場合、アプリケーションはコンパイルに失敗し、値が指定されていないことを示す
io.smallrye.config.ConfigValidationExceptionエラーが返されます。これは、オプションフィールドやデフォルト値のフィールドには適用されません。エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。
curl http://localhost:8080/greeting
curl http://localhost:8080/greetingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のメッセージが表示されます。
hello quarkus!
hello quarkus!Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションを停止するには、CTRL+C を押します。
1.6.2. ネストされたオブジェクト設定の使用 リンクのコピーリンクがクリップボードにコピーされました!
別のインターフェイス内にネストされたインターフェイスを定義できます。この手順では、Quarkus config-quickstart プロジェクトでネストされたインターフェイスを作成および設定する方法を説明します。
前提条件
-
config-quickstartプロジェクトを作成している。 -
プロジェクトの
application.propertiesファイルにgreeting.messageプロパティーおよびgreeting.nameプロパティーを定義している。
手順
プロジェクトの
GreetingResource.javaを確認します。このファイルには、/greetingエンドポイントで HTTP リクエストを送信した場合にメッセージを返すhello()メソッドが含まれるGreetingResourceクラスがあります。GreetingResource.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow GreetingConfigurationインスタンスを使用してGreetingConfiguration.javaクラスファイルを作成します。このクラスには、GreetingResourceクラスで定義されるhello()メソッドの外部化設定が含まれます。GreetingConfiguration.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のように、
GreetingConfigurationインスタンス内にネストされたContentConfigクラスを作成します。GreetingConfiguration.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ContentConfigクラスのメソッド名はcontentです。プロパティーを正しいインターフェイスに確実にバインドするために、このクラスの設定プロパティーを定義する際の接頭辞にcontentを使用します。そうすることで、プロパティー名の競合やアプリケーションの予期しない動作も防げます。application.propertiesファイルでgreeting.content.prize-amountおよびgreeting.content.recipients設定プロパティーを定義します。次の例は、
GreetingConfigurationインスタンスとContentConfigクラスに定義されたプロパティーを示しています。application.propertiesファイルの例greeting.message = hello greeting.name = quarkus greeting.content.prize-amount=10 greeting.content.recipients=Jane,John
greeting.message = hello greeting.name = quarkus greeting.content.prize-amount=10 greeting.content.recipients=Jane,JohnCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例に示すように、3 つの
@ConfigPropertyフィールドアノテーションの代わりに、@Injectアノテーションを使用してGreetingConfigurationインスタンスをGreetingResourceクラスに注入します。また、/greetingエンドポイントが返すメッセージ文字列を、追加した新しいgreeting.content.prize-amountおよびgreeting.content.recipientsプロパティーに設定した値で更新する必要があります。GreetingResource.javaファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 開発モードでアプリケーションをコンパイルして起動します。
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要クラスプロパティーの値を指定しない場合、アプリケーションはコンパイルに失敗し、値が指定されていないことを示す
jakarta.enterprise.inject.spi.DeploymentException例外を受け取ります。これは、Optionalフィールドおよびデフォルト値のフィールドには適用されません。エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウを開いて次のコマンドを入力します。
curl http://localhost:8080/greeting
curl http://localhost:8080/greetingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 2 行の出力を含むメッセージが表示されます。次のように、1 行目にはグリーティングが表示され、2 行目には賞品の受取人および賞品の量が報告されます。
hello quarkus! Jane,John receive total of candies: 10
hello quarkus! Jane,John receive total of candies: 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションを停止するには、CTRL+C を押します。
@ConfigMapping アノテーションが付けられたクラスには、次の例のような Bean Validation アノテーションを付けることができます。
プロジェクトには quarkus-hibernate-validator 依存関係が含まれている必要があります。