Spring 3.1 PropertySourcesPlaceholderConfigurer
javadoc说:
此类被设计为Spring 3.1应用程序中
PropertyPlaceholderConfigurer
的一般替代。
但我没有看到明显的方法来复制PropertyPlaceholderConfigurer
的 searchSystemEnvironment 属性的功能,这使得配置器查找环境变量当没有找到与占位符名称匹配的系统属性时。
请注意,我在SO上询问了很多关于“环境变量”和PropertySourcesPlaceholderConfigurer
的问题,但我见过的每一个都是实际询问系统属性,而不是环境变量
如何判断PropertySourcesPlaceholderConfigurer
是否回退使用环境变量提供占位符值?
答案 0 :(得分:1)
首先要注意的是Javadoc
中的这个片段任何本地属性(例如通过
PropertiesLoaderSupport.setProperties(java.util.Properties)
,PropertiesLoaderSupport.setLocations(org.springframework.core.io.Resource...)
等人加入PropertySource
。搜索本地优先级 属性基于localOverride
属性的值,该属性 默认情况下为false意味着要搜索本地属性 最后,在所有环境属性源之后。
换句话说,PropertySourcesPlaceholderConfigurer
有自己的本地属性源,默认情况下,它会在直接在环境中注册的属性源之后搜索,即。类型为ConfigurableEnvironment
的实例。
在getSystemPropeties()
和getSystemEnvironment()
中ConfigurableEnvironment
的Javadoc继续说
如果当前允许,则返回
System.getProperties()
的值SecurityManager
,否则返回将要执行的地图实现 尝试使用调用来访问各个键System.getProperty(String)
。请注意,大多数
Environment
实施都会包含此系统 属性映射为要搜索的默认PropertySource
。[...]
如果当前允许,则返回
调用来访问各个键System.getenv()
的值 SecurityManager,否则返回一个将执行的map实现 尝试使用System.getenv(String)
请注意,大多数
Environment
实施都会包含此系统 环境地图作为默认PropertySource
进行搜索。
这些 Environment
实现是StandardEnvironment
,这是Spring的ApplicationContext
类的默认使用。
这个类Javadoc陈述
除
ConfigurableEnvironment
这样的常用功能外 作为属性解析和与配置文件相关的操作,这个 实现配置要搜索的两个默认属性源 按以下顺序:
- 系统属性
- 系统环境变量
也就是说,如果JVM系统属性中存在键
"xyz"
以及当前的环境变量集 进程,系统属性中的键"xyz"
的值将返回 致电environment.getProperty("xyz")
。选择此顺序 默认情况下,因为系统属性是per-JVM,而环境 在给定系统上的许多JVM中,变量可能相同。给予 系统属性优先级允许覆盖环境 基于每个JVM的变量。
这些财产来源是可变的和可重新订购的。但是,要回答您的问题,默认情况下已提供您请求的行为。