搜索

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

download PDF

您可以通过实施 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
    注意

    您的自定义转换器类必须 是公共的 转换器,且必须有一个 公共 的非参数构造器。您的自定义转换器类无法 抽象

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 文件示例

    org.acme.config.AnotherCustomValueConverter

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

验证

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.