2014-10-28 97 views
2

我有一个与Spring如何处理多个属性占位符相关的问题。如何在Spring xml文件中使用多个属性占位符

我有这部分代码:

<context:property-placeholder location="classpath:dir1/${myapp.system.property}.properties"/> 

属性myapp.system.property是定义的系统属性。

例如,如果将其定义为“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

不能作为在该位置仅在系统属性/环境谘询性质占位符不替换占位符在不同的地点。我建议不要使用自己的属性来使用弹簧配置文件,或者编写一个'ApplicationContextInitializer'来加载不同的属性文件。 – 2014-10-29 07:11:59

回答

2

你可以做这样的事情

<context:property-placeholder location="classpath:file1.properties,classpath*:project-common.properties,classpath*:project-${spring.profiles.active}.properties"/> 

在我而言,这是一个遗留系统,使属性文件并没有一定的标准名称,但可以肯定,你可以使用通配符来引用您的属性文件。

<context:property-placeholder location="classpath:*.properties"/> 
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"/> 
相关问题