多语言展示
当前在线:1026今日阅读:2今日分享:38

PropertySource抽象化

PropertySource抽象化
工具/原料
1

spring

2

IntelliJ

方法/步骤
1

Spring的Environment抽象提供了对可配置的属性源层次结构的搜索操作。请考虑以下列表:

2

在前面的代码片段中,我们看到了一种向Spring询问是否my-property为当前环境定义属性的高级方法。要回答此问题,Environment对象将对一组对象执行搜索PropertySource 。A PropertySource是对任何键值对源的简单抽象,Spring StandardEnvironment 配置有两个PropertySource对象 - 一个表示JVM系统属性集(System.getProperties()),另一个表示系统环境变量集(System.getenv())。

3

这些默认属性源StandardEnvironment适用于独立应用程序。StandardServletEnvironment 填充了其他默认属性源,包括servlet配置和servlet上下文参数。它可以选择启用a JndiPropertySource。

4

具体来说,当您使用时StandardEnvironment,env.containsProperty('my-property') 如果运行时存在my-property系统属性或my-property环境变量,则调用将返回true 。

5

执行的搜索是分层的。默认情况下,系统属性优先于环境变量。因此,如果my-property在调用期间恰好在两个位置都设置了属性env.getProperty('my-property'),则系统属性值“wins”并返回。请注意,属性值不会合并,而是由前面的条目完全覆盖。

6

对于公共StandardServletEnvironment层次结构,完整层次结构如下,最高优先级条目位于顶部:

7

最重要的是,整个机制是可配置的。您可能希望将自定义的属性源集成到此搜索中。为此,请实现并实例化您自己的PropertySource并将其添加到PropertySources当前的集合中Environment。以下示例显示了如何执行此操作:

8

在上面的代码中,MyPropertySource在搜索中添加了最高优先级。如果它包含my-property属性,则检测并返回该属性,以支持my-property任何其他属性PropertySource。所述 MutablePropertySources API公开了大量的,其允许该组的属性源的精确操作方法。

推荐信息