gpt4 book ai didi

java - 使用 ConfigurationProperties 以通用方式填充 Map

转载 作者:IT老高 更新时间:2023-10-28 13:04:55 24 4
gpt4 key购买 nike

我想知道,是否有一种通用方法可以用您只知道前缀的属性填充 map 。

假设有一堆类似的属性

namespace.prop1=value1
namespace.prop2=value2
namespace.iDontKnowThisNameAtCompileTime=anothervalue

我想要一个通用的方法来在 map 中填充这个属性,比如

@Component
@ConfigurationProperties("namespace")
public class MyGenericProps {
private Map<String, String> propmap = new HashMap<String, String>();

// setter and getter for propmap omitted

public Set<String> returnAllKeys() {
return propmap.keySet();
}
}

或者是否有另一种方便的方法来收集具有特定前缀的所有属性,而不是遍历环境中的所有 PropertySource?

谢谢汉斯约尔格

最佳答案

只要您乐于将每个属性添加到 map 中,而不仅仅是那些您事先不知道的属性,您就可以使用 @ConfigurationProperties 进行此操作。如果要获取 namespace 下的所有内容,则需要使用空前缀并为名为 namespace 的映射提供 getter:

@ConfigurationProperties("")
public class CustomProperties {

private final Map<String, String> namespace = new HashMap<>();

public Map<String, String> getNamespace() {
return namespace;
}

}

Spring Boot 使用 getNamespace 方法来检索映射,以便向其添加属性。使用这些属性:

namespace.a=alpha
namespace.b=bravo
namespace.c=charlie

namespace 映射将包含三个条目:

{a=alpha, b=bravo, c=charlie}

如果属性嵌套更深,例如:

namespace.foo.bar.a=alpha
namespace.foo.bar.b=bravo
namespace.foo.bar.c=charlie

然后您将使用 namespace.foo 作为前缀,并将 CustomProperties 上的 namespacegetNamespace 重命名为bargetBar 分别。

请注意,您应该将 @EnableConfigurationProperties 应用于您的配置以启用对 @ConfigurationProperties 的支持。然后,您可以使用该注解引用您想要处理的任何 bean,而不是为它们提供 @Bean 方法,或者使用 @Component 让它们被组件发现扫描:

@SpringBootApplication
@EnableConfigurationProperties(CustomProperties.class)
public class YourApplication {
// …
}

关于java - 使用 ConfigurationProperties 以通用方式填充 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31045955/

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