第 10 章 使用自定义配置转换器作为配置值


您可以通过实施 org.eclipse.microprofile.config.spi.Converter<T&gt;,并将它完全限定类名称添加到 META-INF/services/org.eclipse.microprofile.config.spi.Converter 文件中。

先决条件

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

流程

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

    org.acme.config.MicroProfileCustomValueConverter
    org.acme.config.SomeOtherConverter
    org.acme.config.YetAnotherConverter
    Copy to Clipboard Toggle word wrap
  2. 实现转换器类来覆盖转换方法:

    package org.acme.config;
    
    import org.eclipse.microprofile.config.spi.Converter;
    
    public class MicroProfileCustomValueConverter implements Converter<MicroProfileCustomValue> {
    
        @Override
        public MicroProfileCustomValue convert(String value) {
            return new MicroProfileCustomValue(Integer.valueOf(value));
        }
    }
    Copy to Clipboard Toggle word wrap
    注意

    您的自定义转换器类必须 是公共的,且必须 具有公共 no-argument 构造器。您的自定义转换器类无法 抽象

  3. 使用您的自定义类型作为配置值:

    @ConfigProperty(name = "configuration.value.name")
    MicroProfileCustomValue value;
    Copy to Clipboard Toggle word wrap

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

所有 Quarkus 内核转换器的默认优先级为 200,所有其他转换器则设为 100。但是,您可以使用 javax.annotation.Priority 注解为您的自定义转换器设置更高的优先级。

以下流程演示了一个自定义转换器 MicroProfileCustomValue 的实施,其优先级为 150,其优先级将优先于 MicroProfileCustomValueConverter,其值为 100。

先决条件

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

流程

  1. 在您的服务文件中添加以下导入语句:

    package org.acme.config;
    
    import javax.annotation.Priority;
    import org.eclipse.microprofile.config.spi.Converter;
    Copy to Clipboard Toggle word wrap
  2. 通过为自定义转换器添加带有 @Priority 注解的类并传递优先级值,为您的自定义转换器设置优先级:

    @Priority(150)
    public class MyCustomConverter implements Converter<MicroProfileCustomValue> {
    
        @Override
        public MicroProfileCustomValue convert(String value) {
    
            final int secretNumber;
            if (value.startsFrom("OBF:")) {
                secretNumber = Integer.valueOf(SecretDecoder.decode(value));
            } else {
                secretNumber = Integer.valueOf(value);
            }
    
            return new MicroProfileCustomValue(secretNumber);
        }
    }
    Copy to Clipboard Toggle word wrap
    注意

    如果添加新的转换器,您必须在 META-INF/services/org.eclipse.microprofile.config.spi.Converter 服务文件中列出它。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat