第10章 カスタム設定コンバーターの設定値としての使用
org.eclipse.microprofile.config.spi.Converter<T>
を実装し、その完全修飾クラス名を META-INF/services/org.eclipse.microprofile.config.spi.Converter
に追加することで、カスタムタイプを設定値として保存できます。
前提条件
-
config-quickstart
プロジェクトを作成している。
手順
以下の例に示すように、
META-INF/services/org.eclipse.microprofile.config.spi.Converter
サービスファイルにコンバーターの完全修飾クラス名を含めます。org.acme.config.MicroProfileCustomValueConverter org.acme.config.SomeOtherConverter org.acme.config.YetAnotherConverter
converter クラスを実装し、convert メソッドを上書きします。
package org.acme.config; import org.eclipse.microprofile.config.spi.Converter; public class MicroProfileCustomValueConverter implements Converter<MicroProfileCustomValue> { @Override public MicroProfileCustomValue convert(String value) { return new MicroProfileCustomValue(Integer.valueOf(value)); } }
注記カスタムコンバータークラスは
public
で、引数なしのコンストラクターpublic
がなければなりません。カスタムコンバータークラスはabstract
であってはなりません。カスタムタイプを設定値として使用します。
@ConfigProperty(name = "configuration.value.name") MicroProfileCustomValue value;
10.1. カスタムコンバーターの優先度の設定
すべての Quarkus コアコンバーターのデフォルト優先度は 200 で、他のすべてのコンバーターは 100 です。ただし、javax.annotation.Priority
アノテーションを使用してカスタムコンバーターにより高い優先度を設定できます。
以下の手順は、優先度が 150 に割り当てられたカスタムコンバーター MicroProfileCustomValue
の実装を説明しています。これは、優先度が 100 である MicroProfileCustomValueConverter
よりも優先されます。
前提条件
-
config-quickstart
プロジェクトを作成している。
手順
以下のインポートステートメントをサービスファイルに追加します。
package org.acme.config; import javax.annotation.Priority; import org.eclipse.microprofile.config.spi.Converter;
クラスに
@Priority
アノテーションを付け、優先度の値を渡して、カスタムコンバーターの優先度を設定します。@Priority(150) public class MyCustomConverter implements Converter<MicroProfileCustomValue> { @Override public MicroProfileCustomValue convert(String value) { final int secretNumber; if (value.startsFrom("OBF:")) { secretNumber = Integer.valueOf(SecretDecoder.decode(value)); } else { secretNumber = Integer.valueOf(value); } return new MicroProfileCustomValue(secretNumber); } }
注記新しいコンバーターを追加する場合は、
META-INF/services/org.eclipse.microprofile.config.spi.Converter
サービスファイルにリストする必要があります。