gpt4 book ai didi

java - 如何为自定义 Quarkus ConfigProperties 使用配置映射

转载 作者:行者123 更新时间:2023-12-04 04:10:05 25 4
gpt4 key购买 nike

对于我的 Quarkus 应用程序,我正在寻找一种从自定义 ConfigProperties 类中定义配置映射的方法。我尝试了以下方法:

import io.quarkus.arc.config.ConfigProperties;
import io.quarkus.runtime.annotations.ConfigItem;

@ConfigProperties(prefix = "my-properties")
public class MyPropertiesConfiguration {

@ConfigItem
public Map<String, FooConfiguration> foo;

// ...
}

import io.quarkus.runtime.annotations.ConfigGroup;
import io.quarkus.runtime.annotations.ConfigItem;

@ConfigGroup
public class FooConfiguration {

@ConfigItem
public String myProperty;
}

鉴于这两个类和以下 application.properties 文件...
my-properties.foo.anystring.my-property=bar

启动时应用程序失败并显示错误消息: javax.enterprise.inject.spi.DeploymentException: No config value of type [java.util.Map] exists for: my-properties.foo
据我了解 https://quarkus.io/guides/writing-extensions#configuration-maps 样本应该可以工作。我究竟做错了什么?这个功能是否仅限于 Quarkus 扩展?

最佳答案

正如此 Quarkus github issue 中所写,目前不支持此功能。
我肮脏的解决方法是直接使用 ConfigProvider。小心使用。

  public static Map<String, String> getMapFromConfig(String prefix) {
final Config config = ConfigProvider.getConfig();
final Iterable<String> propertyNames = config.getPropertyNames();
return StreamSupport.stream(propertyNames.spliterator(), false)
.filter(name -> name.startsWith(prefix) && !name.equalsIgnoreCase(prefix))
.collect(
Collectors.toMap(
propertyName -> cleanupPropertyName(propertyName.substring(prefix.length() + 1)),
propertyName -> config.getOptionalValue(propertyName, String.class).orElse("")));
}

/** Remove start and end double quotes */
public static String cleanupPropertyName(String name) {
if (name.startsWith("\"") && name.endsWith("\"")) {
return name.substring(1, name.length() - 1);
}
return name;
}
我的配置是这样的:
property-templates:
"my.key": value 1
"my.second.key": value 2

关于java - 如何为自定义 Quarkus ConfigProperties 使用配置映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61872993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com