Есть ли способ указать значение свойства по умолчанию в Spring XML? - PullRequest
88 голосов
/ 25 марта 2010

Мы используем PropertyPlaceholderConfigurer для использования свойств java в нашей конфигурации Spring ( подробности здесь )

например:

<foo name="port">
  <value>${my.server.port}</value>
</foo>

Мы хотели бы добавить дополнительное свойство, но у нас есть распределенная система, в которой все существующие экземпляры могут использовать значение по умолчанию. Есть ли способ избежать обновления всех наших файлов свойств, указав значение по умолчанию в конфигурации Spring для случаев, когда не определено переопределяющее значение свойства?

Ответы [ 6 ]

264 голосов
/ 29 марта 2010

Spring 3 поддерживает синтаксис ${my.server.port:defaultValue}.

25 голосов
/ 26 июня 2014

Есть немного известная особенность, которая делает это еще лучше. Вы можете использовать настраиваемое значение по умолчанию вместо жестко заданного, вот пример:

config.properties:

timeout.default=30
timeout.myBean=60

context.xml:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>config.properties</value>
    </property>
</bean>

<bean id="myBean" class="Test">
    <property name="timeout" value="${timeout.myBean:${timeout.default}}" />
</bean>

Чтобы использовать значение по умолчанию, хотя позже его можно будет легко переопределить, выполните это в config.properties:

timeout.myBean = ${timeout.default}
22 голосов
/ 02 октября 2012
<foo name="port">
   <value>${my.server.port:8088}</value>
</foo>

должно работать для вас, чтобы 8088 был портом по умолчанию

Смотрите также: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/

14 голосов
/ 25 марта 2010

Вы ищете PropertyOverrideConfigurer, задокументированный здесь

http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-overrideconfigurer

PropertyOverrideConfigurer, постпроцессор другой фабрики бобов, похож на PropertyPlaceholderConfigurer, но в в отличие от последнего, оригинал определения могут иметь значения по умолчанию или вообще нет значений свойств бина. Если переопределяющий файл свойств делает нет записи для определенного компонента свойство, контекст по умолчанию определение используется.

8 голосов
/ 30 августа 2010

http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html указывает, что «локальные свойства», определенные для самого компонента, будут считаться значениями по умолчанию, которые будут переопределены значениями, считанными из файлов:

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  <property name="location"><value>my_config.properties</value></property>  
  <property name="properties">  
    <props>  
      <prop key="entry.1">123</prop>  
    </props>  
  </property>  
</bean> 
7 голосов
/ 31 мая 2016

Использование ?:, а именно Оператор Элвиса :

<property name="port">
  <value>${my.server.port?:8080}</value>
</property>

<!-- OR -->
<property name="port" value="${my.server.port?:8080}" />

Это сокращение для троичного оператора, доступно начиная с Spring 3.0 , и имеет соединение с того же оператора в Groovy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...