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
注意您的自定义转换器类必须
是公共的
转换器,且必须有一个公共
的非参数构造器。您的自定义转换器类无法抽象
。
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
文件示例org.acme.config.AnotherCustomValueConverter
您必须完成上一步,以确保在编译和启动应用程序时注册并安装了您创建的
Converter
。
验证
完成所需的配置后,下一步是编译并打包 Quarkus 应用程序。如需更多信息和示例,请参阅 Getting started with Quarkus 指南中的编译和打包部分。