1.11. 使用自定义配置转换器作为配置值


您可以通过实施 org.eclipse.microprofile.config.spi.Converter<T> 将自定义类型 存储为配置值,并将其完全限定类名称添加到 META-INF/services/org.eclipse.microprofile.config.spi.Converter 文件中。通过使用转换器,您可以将值的字符串表示转换为对象。

先决条件

您已创建了 Quarkus config-quickstart 项目。

流程

  1. 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;
        }
    }

  2. 实施转换器类,以覆盖生成 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));
        }
    }

  3. 将转换器的完全限定类名称 org.acme.config.MyCustomValueConverter 添加至您的 META-INF/services/org.eclipse.microprofile.config.spi.Converter 服务文件。
  4. GreetingResource.java 文件中,注入 MyCustomValue 属性:

    @ConfigProperty(name="custom")
    MyCustomValue value;
  5. 编辑 hello 方法以使用此值:

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return message + " " + name.orElse("world") + " - " + value.value();
    }
  6. application.properties 文件中,添加要转换的字符串表示:

    custom=1234
  7. 要在开发模式下编译并启动应用程序,请输入以下命令:

    ./mvnw quarkus:dev
  8. 要验证 /greeting 端点是否返回预期消息,请打开终端窗口并输入以下命令:

    curl http://localhost:8080/greeting
  9. 当应用程序成功读取自定义配置时,命令会返回以下响应:

    hello world - 1234
    注意

    您的自定义转换器类必须 是公共的,且必须有一个 公共 的 no-argument 构造器。您的自定义转换器类不能 抽象

1.11.1. 设置自定义转换器优先级

所有 Quarkus 核心转换器的默认优先级都是 200。对于所有其他转换器,默认优先级为 100。您可以使用 jakarta.annotation.Priority 注解来增加自定义转换器的优先级。

以下流程演示了自定义转换器的实施,即 AnotherCustomValueConverter,其优先级为 150。这优先于上一节中的 MyCustomValueConverter,其默认优先级为 100。

先决条件

  • 您已创建了 Quarkus config-quickstart 项目。
  • 您已为应用程序创建了自定义配置转换器。

流程

  1. 通过为自定义转换器添加 @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));
        }
    }

  2. 在项目的 src/main/resources/META-INF/services/ 子目录中创建名为 org.eclipse.microprofile.config.spi.Converter 的文件,然后在您创建的文件中输入实现 Converter 的类的完全限定名称:

    示例 org.eclipse.microprofile.config.spi.Converter file

    org.acme.config.AnotherCustomValueConverter

    您必须完成上一步,以确保在编译和启动应用程序时注册并安装您创建的 Converter

验证

完成所需的配置后,下一步是编译并打包您的 Quarkus 应用程序。如需更多信息和示例,请参阅 Getting started with Quarkus 指南中的 compiling and packaging 部分。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.