1.11. 使用自定义配置转换器作为配置值
您可以通过实施 org.eclipse.microprofile.config.spi.Converter<T> 将自定义类型
存储为配置值,并将其完全限定类名称添加到 META-INF/services/org.eclipse.microprofile.config.spi.Converter
文件中。通过使用转换器,您可以将值的字符串表示转换为对象。
先决条件
您已创建了 Quarkus 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; } }
实施转换器类,以覆盖生成
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
注意您的自定义转换器类必须
是公共的
,且必须有一个公共
的 no-argument 构造器。您的自定义转换器类不能抽象
。
1.11.1. 设置自定义转换器优先级
所有 Quarkus 核心转换器的默认优先级都是 200。对于所有其他转换器,默认优先级为 100。您可以使用 jakarta.annotation.Priority
注解来增加自定义转换器的优先级。
以下流程演示了自定义转换器的实施,即 AnotherCustomValueConverter
,其优先级为 150。这优先于上一节中的 MyCustomValueConverter
,其默认优先级为 100。
先决条件
-
您已创建了 Quarkus
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
fileorg.acme.config.AnotherCustomValueConverter
您必须完成上一步,以确保在编译和启动应用程序时注册并安装您创建的
Converter
。
验证
完成所需的配置后,下一步是编译并打包您的 Quarkus 应用程序。如需更多信息和示例,请参阅 Getting started with Quarkus 指南中的 compiling and packaging 部分。