如果我有系统属性,我通过我的容器(例如Tomcat),如下所示:
-Dmy.property=myValueOne
和我的web.xml中定义的具有相同键的属性:
<context-param>
<param-name>my.property</param-name>
<param-value>myValueTwo</param-value>
</context-param>
...以及在我的一个config * .properties文件中定义了相同键的属性:
my.property=myValueThree
这个属性有哪些值?
myValueOne
,myValueTwo
或myValueThree
?
如果您有多个具有相同键的属性,是否有一个层次结构来定义哪种属性会覆盖哪种其他属性?
答案 0 :(得分:4)
简单地说,这三个都可用,您可以使用SpEL获取每个值。
#{systemProperties['my.property']} // myValueOne
#{servletContextInitParams['my.property'] // myValueTwo
属性取决于您加载它们的方式(@PropertySource
或`
但是,您可能想知道如果使用占位符会发生什么情况,并且您已经拥有了这种情况。
<property name="myProperty" value="${my.property}" />
假设您使用默认值(并且在Spring 3.1或更高版本上),则在基于Web的环境中按顺序查阅以下资源。
因此,在您的情况下,${my.property}
将解析为 myValueThree 。也就是说,如果保留默认值。如果指定local-override="true"
,则最后查询属性文件,值为 myValueTwo 。
链接