Estoy tratando de utilizar la anotación @Valor en los parámetros de un constructor de la siguiente manera:primavera @Valor anotación no usar por defecto cuando la propiedad no está presente
@Autowired
public StringEncryptor(
@Value("${encryptor.password:\"\"}") String password,
@Value("${encryptor.algorithm:\"PBEWithMD5AndTripleDES\"}") String algorithm,
@Value("${encryptor.poolSize:10}") Integer poolSize,
@Value("${encryptor.salt:\"\"}") String salt) {
...
}
Cuando el archivo de propiedades se encuentra presente en la ruta de clases, la las propiedades se cargan perfectamente y la prueba se ejecuta correctamente. Sin embargo, cuando elimino el archivo de propiedades del classpath, esperaba que se hubieran utilizado los valores predeterminados, por ejemplo poolSize se establecería en 10 o algoritmo en PBEWithMD5AndTripleDES, pero este no es el caso.
Ejecutar el código a través de un depurador (que sólo funcionan después de cambiar @Value("${encryptor.poolSize:10}") Integer poolSize
a @Value("${encryptor.poolSize:10}") String poolSize
ya que estaba causando NumberFormatExceptions) Me parece que los valores predeterminados no se están creando y los parámetros están en la forma de:
poolSize = ${encryptor.poolSize:10}
o
algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}
en lugar de la esperada
poolSize = 10
o
algorithm = "PBEWithMD5AndTripleDES"
Basado en SPR-4785 la notación como $ {my.property:myDefaultValue} debería funcionar. ¡Sin embargo, no me está pasando!
Gracias
Exactamente lo que me estaba perdiendo. ¡Gracias! – garyj
... o si usa la configuración basada en anotaciones con 'PropertySourcePlaceholderConfigurer':' propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound (true); ' –