我有一个与Spring如何处理多个property-placeholder相关的问题。
我有这部分代码:
<context:property-placeholder location="classpath:dir1/${myapp.system.property}.properties"/>
属性myapp.system.property是已定义的System属性。
例如,如果将其定义为“devsystem”,则会导入devsystem.properties中定义的所有属性,并且可以在下面的代码中使用。
现在我想要另一个属性文件,其名称由devsystem.property文件中的属性定义:
<context:property-placeholder location="classpath:dir1/${myapp.system.property}.properties"/>
<context:property-placeholder location="classpath:dir2/myapp-${myapp.environment}.properties"/>
myapp.environment是devsystem.properties文件中定义的属性。
这停止了工作。 Spring无法解析$ {myapp.environment}并抱怨它无法找到文件dir2 / myapp - $ {myapp.environment} .properties。
有人可以让我知道我做错了什么,我怎样才能让它发挥作用?
非常感谢。
答案 0 :(得分:3)
你可以做这样的事情
<context:property-placeholder location="classpath:file1.properties,classpath*:project-common.properties,classpath*:project-${spring.profiles.active}.properties"/>
在我的情况下,它是一个遗留系统,因此属性文件没有一些标准名称,但肯定可以使用通配符来引用属性文件。
<context:property-placeholder location="classpath:*.properties"/>
答案 1 :(得分:1)
您可以使用
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:file1.properties</value>
<value>classpath:file2.properties</value>
</property>
</bean>
或(逗号分隔)
<context:property-placeholder location="classpath:file1.properties,classpath:file2.properties"/>
答案 2 :(得分:0)
仅仅晚了4年,但我在4月的春季找到了一种方法(我使用的是4.2.2)。
技巧是使用util:properties包装2个属性文件,并使用SpEL访问第一个文件中包含的值:
<util:properties
id="specific"
location="classpath:dir1/#{systemProperties['myapp.system.property']}.properties"/>
<util:properties
id="devProperties"
location="classpath:dir2/myapp-#{specific['myapp.environment']}.properties"/>
<context:property-placeholder properties-ref="specific" order="1" ignore-unresolvable="true" />
<context:property-placeholder properties-ref="devProperties" order="2" ignore-unresolvable="true" />
使用可以访问创建的bean的属性。
ignore-unresolvable是访问两个属性占位符而不会出现错误的方法
希望它从现在开始对某人有所帮助。