使用ConfigurationProperties以通用方式填充Map

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

假设有很多属性,例如

namespace.prop1=value1

namespace.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=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作为前缀和重命名namespace以及getNamespaceCustomPropertiesbargetBar分别。

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

@SpringBootApplication

@EnableConfigurationProperties(CustomProperties.class)

public class YourApplication {

// …

}

以上是 使用ConfigurationProperties以通用方式填充Map 的全部内容, 来源链接: utcz.com/qa/436024.html

回到顶部