java - beans - spring bean property
¿Hay alguna forma de especificar un valor de propiedad predeterminado en Spring XML? (6)
Estamos utilizando un PropertyPlaceholderConfigurer para usar las propiedades de Java en nuestra configuración de Spring ( detalles aquí )
p.ej:
<foo name="port">
<value>${my.server.port}</value>
</foo>
Nos gustaría agregar una propiedad adicional, pero tenemos un sistema distribuido donde las instancias existentes 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?
¿Está buscando el PropertyOverrideConfigurer documentado aquí?
PropertyOverrideConfigurer, otro postprocesador de fábrica de bean, es similar al PropertyPlaceholderConfigurer, pero a diferencia de este último, las definiciones originales pueden tener valores predeterminados o ningún valor para las propiedades de bean. Si un archivo de propiedades que reemplaza no tiene una entrada para una cierta propiedad de bean, se usa la definición de contexto predeterminada.
Hay una característica poco conocida, que lo hace aún mejor. Puede usar un valor predeterminado configurable en lugar de un código fijo, aquí hay 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>
Para usar el valor predeterminado mientras todavía se puede sobrescribir fácilmente más adelante, haga esto en config.properties:
timeout.myBean = ${timeout.default}
Spring 3 admite la sintaxis de ${my.server.port:defaultValue}
.
Uso ?:
, Es decir, el operador de Elvis :
<property name="port">
<value>${my.server.port?:8080}</value>
</property>
<!-- OR -->
<property name="port" value="${my.server.port?:8080}" />
Es una abreviatura del operador ternario, available desde Spring 3.0 , y tiene una conexión con el mismo operador en Groovy .
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html señala que las "propiedades locales" definidas en el bean en sí mismas se considerarán valores predeterminados para ser reemplazadas por los valores leídos de los 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>
<foo name="port">
<value>${my.server.port:8088}</value>
</foo>
debería funcionar para que tenga 8088 como puerto predeterminado
Ver también: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/