Есть ли способ указать значение свойства по умолчанию в Spring XML?


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

например:

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

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

6 86

6 ответов:

вы ищете PropertyOverrideConfigurer документально здесь

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

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

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

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

config.свойства:

timeout.default=30
timeout.myBean=60

контексте.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>

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

timeout.myBean = ${timeout.default}
<foo name="port">
   <value>${my.server.port:8088}</value>
</foo>

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

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

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> 

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

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

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

это сокращение для тернарного оператора,скачать С Весна 3.0, и имеет связь с тот же оператор в Groovy.