2012-02-24 9 views
5

que tienen un archivo de configuración de primavera que incluye los siguientes elementos:¿Puedo establecer de forma predeterminada una propiedad del sistema para un constructor-arg en un archivo de configuración de primavera?

<context:property-placeholder location="classpath:default.properties"/> 

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="${varName}"/> 
</bean> 

"varName" se mueve ahora desde el archivo de propiedades a una propiedad del sistema. Que se añade cuando comienzo a una acumulación de Maven:

mvn clean install -DvarName=data 

Quiero correr también mi construcción sin especificar varName:

mvn clean install 

¿Hay alguna manera de defecto varName en mi config primavera? Aunque esto no funciona, un ejemplo conceptual de lo que yo estoy buscando es:

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="${varName}" default="theDefaultValue"/> 
</bean> 
+0

¿Tiene que ser un sistema de propiedad? ¿Se puede especificar en otro archivo? –

+0

Tiene que ser dinámico en tiempo de compilación. Estoy abierto a sugerencias sobre cómo. Necesito especificar diferentes valores para varName cuando invoco una compilación, y también necesito invocar una compilación sin especificar varName. – TERACytE

+0

¿Sería útil especificar múltiples archivos de propiedades?El elemento 'location' admite varios archivos delimitados por comas (,). Puede especificar otro archivo que tenga los 'valores predeterminados del sistema' y, si no puede ser resuelto por 'classpath: default.properties', entonces intentará resolverlo con el siguiente archivo de propiedades. –

Respuesta

4

Resulta que en primavera v2.5 +, si no es una propiedad del sistema definido, que puede ser utilizado en lugar de una propiedad definida en el archivo de propiedades. Solo necesita asegurarse de que se usa el mismo nombre y que la opción 'anular' está habilitada.

Por ejemplo, teniendo en cuenta:

<!-- my spring config file --> 
<context:property-placeholder location="classpath:default.properties" system-properties-mode="OVERRIDE"/> 

Y:

# default.properties file 
theVariable=One 

Cuando ejecuto:

mvn clean install 

"uno" es captada por theVariable. Si ejecuto:

mvn clean install -DtheVariable=Two 

"Dos" es captada en su lugar.

3

no estoy seguro de si esto ayuda, pero si usted está anotando clases y desea un valor predeterminado cuando una propiedad del sistema no está presente esto es lo que actualmente hago:

@Value("#{systemProperties['fee.cc']?:'0.0225'}") 
public void setCcFeePercentage(BigDecimal ccFeePercentage) { 
    this.setCcFeePercentage(ccFeePercentage); 
} 
1

Se puede hacer como @sebastien ha descrito, pero en el fichero de configuración como desee:

<bean id="theVar" class="java.lang.String"> 
    <constructor-arg value="#{systemProperties['varName'] == null ? 'default_value' : systemProperties['varName']}"/> 
</bean> 

Si su variable varName no está presente, se establecerá el valor predeterminado.

Cuestiones relacionadas