如何在Spring xml文件中使用多个property-placeholder

时间:2014-10-28 21:00:51

标签: java spring

我有一个与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。

有人可以让我知道我做错了什么,我怎样才能让它发挥作用?

非常感谢。

3 个答案:

答案 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是访问两个属性占位符而不会出现错误的方法

希望它从现在开始对某人有所帮助。