1.11. カスタム設定コンバーターの設定値としての使用
org.eclipse.microprofile.config.spi.Converter<T>
を実装し、その完全修飾クラス名を META-INF/services/org.eclipse.microprofile.config.spi.Converter
に追加することで、カスタムタイプを設定値として保存できます。コンバーターを使用すると、値の文字列表現をオブジェクトに変換できます。
前提条件
config-quickstart
プロジェクトを作成している。
手順
org.acme.config
パッケージで、次の内容を含むorg.acme.config.MyCustomValue
クラスを作成します。カスタム設定値の例
package org.acme.config; public class MyCustomValue { private final int value; public MyCustomValue(Integer value) { this.value = value; } public int value() { return value; } }
コンバータークラスを実装し、convert メソッドをオーバーライドして
MyCustomValue
インスタンスを生成します。コンバータークラスの実装例
package org.acme.config; import org.eclipse.microprofile.config.spi.Converter; public class MyCustomValueConverter implements Converter<MyCustomValue> { @Override public MyCustomValue convert(String value) { return new MyCustomValue(Integer.valueOf(value)); } }
-
コンバーターの完全修飾クラス名
org.acme.config.MyCustomValueConverter
をMETA-INF/services/org.eclipse.microprofile.config.spi.Converter
サービスファイルに追加します。 GreetingResource.java
ファイルに、MyCustomValue
プロパティーを注入します。@ConfigProperty(name="custom") MyCustomValue value;
この値を使用するように
hello
メソッドを編集します。@GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return message + " " + name.orElse("world") + " - " + value.value(); }
application.properties
ファイルに、変換する文字列表現を追加します。custom=1234
以下のコマンドを入力して、開発モードでアプリケーションをコンパイルし、起動します。
./mvnw quarkus:dev
ターミナルウィンドウを開いて次のコマンドを入力し、
/greeting
エンドポイントが予期したメッセージを返すことを確認します。要求の例
curl http://localhost:8080/greeting
アプリケーションがカスタム設定を正常に読み取ると、コマンドは次のレスポンスを返します。
hello world - 1234
注記カスタムコンバータークラスは
public
で、引数なしのコンストラクターpublic
がなければなりません。カスタムコンバータークラスはabstract
であってはなりません。
1.11.1. カスタムコンバーターの優先度の設定
Quarkus コアコンバータの優先度は、すべてデフォルトで 200 です。他のコンバーターの優先度は、すべてデフォルトで 100 です。jakarta.annotation.Priority
アノテーションを使用して、カスタムコンバーターの優先度を上げることができます。
次の手順は、優先度 150 のカスタムコンバーター AnotherCustomValueConverter
の実装を示しています。これは、デフォルトの優先度 100 に設定されている前のセクションの MyCustomValueConverter
よりも優先されます。
前提条件
-
config-quickstart
プロジェクトを作成している。 - アプリケーションのカスタム設定コンバーターを作成している。
手順
クラスに
@Priority
アノテーションを付け、優先度の値を渡して、カスタムコンバーターの優先度を設定します。次の例では、優先度の値は150
に設定されています。AnotherCustomValueConverter.java
ファイルの例package org.acme.config; import jakarta.annotation.Priority; import org.eclipse.microprofile.config.spi.Converter; @Priority(150) public class AnotherCustomValueConverter implements Converter<MyCustomValue> { @Override public MyCustomValue convert(String value) { return new MyCustomValue(Integer.valueOf(value)); } }
プロジェクトの
src/main/resources/META-INF/services/
サブディレクトリーにorg.eclipse.microprofile.config.spi.Converter
という名前のファイルを作成し、作成したファイルにConverter
を実装するクラスの完全修飾名をファイルに入力します。org.eclipse.microprofile.config.spi.Converter
ファイルの例org.acme.config.AnotherCustomValueConverter
アプリケーションをコンパイルして起動する際に、作成した
Converter
が確実い登録およびインストールされているようにするには、前の手順を完了する必要があります。
検証
必要な設定を完了してから、次のステップとして Quarkus アプリケーションをコンパイルしてパッケージ化します。詳細と例は、Quarkus スタートガイド でコンパイルおよびパッケージ化のセクションを参照してください。