2013-06-07 3 views
0

у меня есть следующие файлы свойств с Spring FrameworkSpring - как использовать PropertyPlaceholderConfigurer динамически загружать файлы

config.properties
с содержанием

environment=devel //posible values: devel, testing, prod 

и с предыдущим свойством среды, выбрать некоторые из Следующие файлы для загрузки динамически

config-service1-devel.properties 
config-service1-testing.properties 
config-service1-prod.properties 
config-serviceN-devel.properties 
config-serviceN-testing.properties 
config-serviceN-prod.properties 

а затем, с весной, я хочу загрузить th e, я решаю загрузить первый файл свойств, но я не понимаю, как использовать язык выражения для завершения значений зависимых свойств.

<bean id="MainApplicationProperties" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" 
     value="file://#{systemProperties['jboss.server.home.dir']}/conf/services.properties" /> 

    <property name="placeholderPrefix" value="$mainProperty{" /> 
    <property name="placeholderSuffix" value="}" /> 
</bean> 
<bean id="SecondApplicationProperties" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    depends-on="MainApplicationProperties"> 

    <property name="locations"> 
     <list> 
      <value>file://#{systemProperties['jboss.server.home.dir']}/conf/serviceOne/service1-$mainProperty{environment}.properties</value> 
      <value>file://#{systemProperties['jboss.server.home.dir']}/conf/serviceTwo/service2-$mainProperty{environment}.properties</value> 
      <value>file://#{systemProperties['jboss.server.home.dir']}/conf/serviceN/serviceN-$mainProperty{environment}.properties</value> 
     </list> 
    </property> 

</bean> 

выход ошибки в следующем,

java.io.FileNotFoundException: /..../conf/serviceOne/service1-$mainProperty{environment}.properties (No such file or directory) 

мое мнение, что значение не заменяется

HelpMe, благодаря

ответ

1

Проблема заключается в том, что, когда BeanFactoryPostProcessors начинают вызывается, они уже созданы. Итак, даже вы, первый PropertyPlaceholderConfigurer, модифицируете определение компонента второго PropertyPlaceholderConfigurer, оно не действует, поскольку оба компонента уже были созданы.

+0

свойство 'locations' 'PropertyPlaceHolder', не передавая процесс оценки языком выражения для извлечения реального значения местоположения, вопрос в том, почему EL не обрабатывает значение свойства 'location'? – jrey

+0

Я воспроизвел поведение и обновил свой ответ ... то, что вы пытаетесь сделать, невозможно. –

Смежные вопросы