Файл свойств Spring, устанавливающий значения по умолчанию - PullRequest
8 голосов
/ 16 июня 2011

У меня есть файл свойств вне моего war-файла, который используется системным администратором для отключения определенных системных функций.Он отлично работал на моей локальной машине, но когда мы развернули в среде разработки, файл свойств не был загружен, и приложение не запустилось.Мне было интересно, есть ли способ объявить значения по умолчанию в моем applicationContext для значений, которые обычно приходят из файла свойств.

В настоящее время у меня есть это, чтобы прочитать файл свойств:

<util:properties id="myProperties" location="file:${catalina.home}/webapps/myProperties.properties"/>

Это прекрасно работает, если мы не забываем разместить файл свойств в нужном месте.Есть ли способ объявить значения по умолчанию или, возможно, прочитать из другого файла, если этот файл не найден?

Спасибо

Ответы [ 2 ]

11 голосов
/ 16 июня 2011

Вместо использования <util:properties> используйте PropertiesFactoryBean с setIgnoreResourceNotFound=true.

Например:

<bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
   <property name="ignoreResourceNotFound"><value>true</value></property>
   <property name="locations">
      <list>
        <value>classpath:default.properties</value>
        <value>file:${catalina.home}/webapps/myProperties.properties</value>
      </list>
   </property>
</bean> 

Обратите внимание, что порядок перечисленных файлов важен,Свойства в более поздних файлах переопределяют более ранние.

3 голосов
/ 07 февраля 2012

В качестве ответа на ответ @ ericacm, если вы хотите, вы также можете настроить значения по умолчанию непосредственно в контексте, вместо использования отдельного файла default.properties:

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"
  p:location="file:${catalina.home}/webapps/myProperties.properties"
  p:ignoreResourceNotFound="true">
  <property name="properties">
     <props>
       <prop key="default1">value1</prop>
       ...
     </props>
   </property>
</bean>

Примечания: здесь используется p-namespace для свойств location и ignoreResourceNotFound.

...