繁体   English   中英

属性的优先级:系统与部署描述符与属性文件

[英]Precedence of properties: system vs. deployment descriptor vs. properties file

如果我有系统属性,我通过我的容器(例如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

这个房产有哪些价值? myValueOnemyValueTwomyValueThree

如果你有几个具有相同键的属性,是否有一个层次结构来定义哪种属性覆盖哪种其他属性?

简单地说,这三个都可用,您可以使用SpEL获取每个值。

#{systemProperties['my.property']} // myValueOne
#{servletContextInitParams['my.property'] // myValueTwo

属性取决于你如何加载它们( @PropertySource或`

但是,您可能想知道如果使用占位符会发生什么,并且您有自己的情况。

<property name="myProperty" value="${my.property}" />

假设您使用默认值(并且在Spring 3.1或更高版本上),则在基于Web的环境中按顺序查询以下资源。

  1. 属性文件
  2. ServletConfig Init Params(
  3. ServletContext Init Params
  4. JNDI
  5. 系统属性(由-D指定)
  6. 环境属性

所以在你的情况下, ${my.property}将解析为myValueThree 也就是说,如果保留默认值。 如果指定local-override="true" ,则最后查询属性文件,值为myValueTwo

链接

  • StandardServletEnvironment javadoc
  • StandardEnvironment javadoc
  • PropertySourcesPlaceholderConfigurer javadoc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM