使用ConfigurationProperties以通用方式填充Map
我想知道,是否有一种通用的方法可以用您只知道前缀的属性来填充地图。
假设有很多属性,例如
namespace.prop1=value1namespace.prop2=value2
namespace.iDontKnowThisNameAtCompileTime=anothervalue
我想以一种通用的方式在地图中填充此属性,例如
@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?
谢谢汉斯约格
回答:
只要您乐意将所有属性添加到地图中,而不只是仅添加一些您事先不知道的属性,都可以使用进行操作@ConfigurationProperties
。如果要获取下面的所有内容,namespace
则需要使用一个空前缀并为名为的地图提供一个吸气剂namespace
:
@ConfigurationProperties("")public class CustomProperties {
private final Map<String, String> namespace = new HashMap<>();
public Map<String, String> getNamespace() {
return namespace;
}
}
Spring Boot使用该getNamespace
方法检索地图,以便可以向其添加属性。具有以下属性:
namespace.a=alphanamespace.b=bravo
namespace.c=charlie
该namespace
地图将包含三个条目:
{a=alpha, b=bravo, c=charlie}
如果属性嵌套得更深,例如:
namespace.foo.bar.a=alphanamespace.foo.bar.b=bravo
namespace.foo.bar.c=charlie
然后你会使用namespace.foo
作为前缀和重命名namespace
以及getNamespace
对CustomProperties
以bar
和getBar
分别。
请注意,您应该应用@EnableConfigurationProperties
配置以启用对的支持@ConfigurationProperties
。然后,您可以使用该批注引用要处理的任何bean,而不是为其提供@Bean
方法,或者@Component
通过组件扫描来发现它们:
@SpringBootApplication@EnableConfigurationProperties(CustomProperties.class)
public class YourApplication {
// …
}
以上是 使用ConfigurationProperties以通用方式填充Map 的全部内容, 来源链接: utcz.com/qa/436024.html