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;
       }
    }
    Copy to Clipboard Toggle word wrap

  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));
        }
    }
    Copy to Clipboard Toggle word wrap

  3. 将转换器的完全限定类名称包含在 META-INF/services/org.eclipse.microprofile.config.spi.Converter 服务文件中,如下例所示:

    org.eclipse.microprofile.config.spi.Converter 文件示例

    org.acme.config.MyCustomValueConverter
    org.acme.config.SomeOtherConverter
    org.acme.config.YetAnotherConverter
    Copy to Clipboard Toggle word wrap

  4. GreetingResource.java 文件中,注入 MyCustomValue 属性:

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

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

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

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

    请求示例

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap

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

    hello world - 1234
    Copy to Clipboard Toggle word wrap
    注意

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

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));
        }
      }
    Copy to Clipboard Toggle word wrap

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

    org.eclipse.microprofile.config.spi.Converter 文件示例

    org.acme.config.AnotherCustomValueConverter
    Copy to Clipboard Toggle word wrap

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

验证

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat