gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:36 25 4
gpt4 key购买 nike

我有三个属性文件:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com