java - 具有重叠位置的多个属性占位符不起作用?

标签 java spring

我有三个属性文件:

file1.properties 包含:
propA=1

file2.properties 包含:
propA=2 propB=2

file3.properties 包含:
propA=3 propB=3 propC=3

和两个应用程序上下文:

applicationContext1.xml 包含:
<context:property-placeholder location="classpath:file1.properties,classpath:file2.properties" ignore-resource-not-found="true" ignore-unresolvable="true" system-properties-mode="OVERRIDE"/>

applicationContext2.xml 包含:
<context:property-placeholder location="classpath:file2.properties,classpath:file3.properties" ignore-resource-not-found="true" ignore-unresolvable="true" system-properties-mode="OVERRIDE"/>

还有一个加载上下文并注入(inject)所有属性的测试。 MyTest.java:

@Value("${propA}")
private String propA;

@Value("${propB}")
private String propB;

@Value("${propC}")
private String propC;

我得到以下值:

 propA=2
 propB=2
 propC=3

为什么“propA”和“propB”不是从 file3.properties 中获取的?

最佳答案

拥有多个属性占位符配置器并不像您想象的那样工作。没有属性覆盖功能。第一个尝试并替换它可以替换的内容,然后下一个尝试用剩下的内容等等。 如果你想覆盖属性,你最好定义一个具有多个源的属性 bean,例如:

<bean name="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
        <property name="locations">
            <list>
                <value>classpath:conf/app-defaults.properties</value>
                <value>file:${CATALINA_BASE}/conf/my-app.properties</value>                 
            </list>
        </property>
        <property name="ignoreResourceNotFound" value="true" />
    </bean>

上面的代码定义了一个具有默认值的属性 bean,来自类路径文件和一个可选的外部化文件,该文件覆盖默认值并驻留在 tomcat 安装中。 然后您可以使用属性占位符,例如:

<context:property-placeholder properties-ref="appProperties" /> 

关于java - 具有重叠位置的多个属性占位符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27122019/

相关文章:

java - 用于多个配置文件的 Micronaut PropertySource

java - 监测方法统计

Spring REST @RequestMapping 采用多种媒体类型

java - Spring Boot方法验证

java - 无法解析导入 javax.servlet 和 org.hibernate - Ubuntu 12.04 上的 Eclipse Kepler

java - 从 @ResponseBody 返回 JSONArray 时抛出错误

c# - C# 中的任何泛型(参见代码)

java - 在 JAVA 中从基 X 转换为基 Y 与 PHP 中的相同函数返回不同的字符

java - Bukkit 掉落爆炸 block

java.lang.NoClassDefFoundError 使用 org.json 库