2010-03-25 9 views
80

estamos utilizando un PropertyPlaceholderConfigurer utilizar las propiedades de Java en nuestra configuración de la primavera (details here)¿Hay alguna manera de especificar un valor de propiedad predeterminado en Spring XML?

por ejemplo:

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

Nos gustaría añadir una propiedad más, pero tienen un sistema distribuido donde las instancias existentes todos podrían usar un valor predeterminado. ¿Hay alguna manera de evitar la actualización de todos nuestros archivos de propiedades, indicando un valor predeterminado en la configuración de Spring para cuando no se define un valor de propiedad superior?

Respuesta

13

¿Está buscando el PropertyOverrideConfigurer documenta aquí

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

El PropertyOverrideConfigurer, otra fábrica de beans post-procesador, es similar a la PropertyPlaceholderConfigurer, pero en contraste con este último, las definiciones originales pueden tener valores predeterminados o sin valores en absoluto para propiedades de bean. Si un archivo de Propiedades que reemplaza no no tiene una entrada para cierta propiedad de bean , se utiliza la definición de contexto predeterminada.

+0

¿Podría alguien explicarme qué es un '18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA'? Estoy seguro de que todos los demás saben y soy estúpido, pero por las dudas ... –

237

Spring 3 admite ${my.server.port:defaultValue} sintaxis.

+8

Solo para referencia: [SPR-4785] (https://jira.springsource.org/browse/SPR-4785) – cubanacan

+8

para mí, siempre anula la propiedad con valor predeterminado sin importar si la propiedad está definida o no. –

+0

¡Funciona bien para mí! –

8

http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html señala que "las propiedades locales" definidos en el propio bean serán considerados predeterminados sean sobrescritos por los valores leídos de archivos:

<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> 
+0

thx, había palabras sobre eso en la primavera de javadoc, ¡pero no pude imaginar cómo hacerlo! – Guillaume

20

No es una característica poco conocida, lo que hace Thi es aún mejor Puede utilizar un valor predeterminado configurable en vez de uno no modificable, aquí está un ejemplo:

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> 

de utilizar el valor por defecto sin dejar de ser capaz de anular fácilmente más adelante, hacer esto en config.properties:

timeout.myBean = ${timeout.default} 
Cuestiones relacionadas