I @Value Anmerkung in den Parametern eines Konstruktor zu verwenden, versuchen wie folgt:Frühling @Value Annotation nicht standardmäßig verwenden, wenn Eigenschaft nicht vorhanden ist
@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) {
...
}
Wenn die Eigenschaftsdatei auf dem Classpath vorhanden ist, die Eigenschaften werden perfekt geladen und der Test wird ordnungsgemäß ausgeführt. Wenn ich jedoch die Eigenschaftendatei aus dem Klassenpfad lösche, hätte ich erwartet, dass die Standardwerte verwendet worden wären, zum Beispiel poolSize würde auf 10 oder Algorithmus auf PBEWithMD5AndTripleDES gesetzt werden, dies ist jedoch nicht der Fall.
Ausführen des Codes durch einen Debugger (die erst nach @Value("${encryptor.poolSize:10}") Integer poolSize
zu @Value("${encryptor.poolSize:10}") String poolSize
Wechsel funktionieren würde, wie es NumberFormatExceptions verursacht wurde) Ich finde, dass die Standardeinstellungen nicht festgelegt werden und die Parameter in Form von:
poolSize = ${encryptor.poolSize:10}
oder
algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}
statt der erwarteten
poolSize = 10
oder
algorithm = "PBEWithMD5AndTripleDES"
Basierend auf SPR-4785 sollte die Notation wie $ {my.property:myDefaultValue} funktionieren. Aber es passiert nicht für mich!
Danke
Genau das, was ich fehlte. Vielen Dank! – garyj
... oder wenn eine Annotation-basierte Konfiguration mit einem 'PropertySourcePlaceholderConfigurer' verwendet wird:' propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound (true); ' –