2014-10-28 3 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» для загрузки различных файлов свойств. –

ответ

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"/>