Estamos usando un PropertyPlaceholderConfigurer para usar propiedades 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 forma de evitar actualizar todos nuestros archivos de propiedades, indicando un valor predeterminado en la configuración de Spring para cuando no hay un valor de propiedad primordial definido?
fuente
18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA
es? Estoy seguro de que todos los demás lo saben y soy estúpido, pero por si acaso ...Spring 3 admite la
${my.server.port:defaultValue}
sintaxis.fuente
${my.server.port:-defaultValue}
también da el mismo resultado, tenga en cuenta el ":-
" en lugar de ":
".<context:property-placeholder/>
para que esto funcione, o agregar unPropertyPlaceholderConfigurer
Hay una característica poco conocida que lo hace aún mejor. Puede utilizar un valor predeterminado configurable en lugar de uno codificado, aquí hay un ejemplo:
config.properties:
context.xml:
Para usar el valor predeterminado y poder anular fácilmente más adelante, haga esto en config.properties:
fuente
${timeout.myBean:${timeout.default}}
. Esto permitió que mi valor predeterminado también fuera una variable.debería funcionar para que tenga 8088 como puerto predeterminado
Véase también: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/
fuente
El valor predeterminado se puede seguir con una
:
después de la clave de propiedad, p. Ej.O en código java:
Ver:
valueSeparator
(deAbstractPropertyResolver
)y
VALUE_SEPARATOR
(deSystemPropertyUtils
)Por cierto, Elvis Operator solo está disponible en Spring Expression Language (SpEL),
por ejemplo: https://stackoverflow.com/a/37706167/537554
fuente
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html señala que las "propiedades locales" definidas en el propio bean se considerarán valores predeterminados que se anularán con los valores leídos de los archivos:
fuente
También encuentro otra solución que me funciona. En nuestro proyecto de primavera heredado usamos este método para brindar a nuestros usuarios la posibilidad de usar estas propias configuraciones:
Y en nuestro código para acceder a estas propiedades necesitamos escribir algo como eso:
Y si surge una situación en la que necesita agregar una nueva propiedad, pero en este momento no desea agregarla en la configuración del usuario de producción, se convierte muy rápidamente en un infierno cuando necesita parchear todos sus contextos de prueba o su aplicación fallará. puesta en marcha.
Para manejar este problema, puede usar la siguiente sintaxis para agregar un valor predeterminado:
Fue un verdadero descubrimiento para mí.
fuente