J'injecte les propriétés de .properties file dans les champs annotés avec @Value . Cependant, ces propriétés présentent des informations d'identification sensibles, je les supprime donc du référentiel. Je veux toujours que dans le cas où quelqu'un voudrait exécuter le projet et n'a pas de fichier .properties avec les informations d'identification que les valeurs par défaut seront définies aux champs.
Même si je règle les valeurs par défaut sur le champ même, j'obtiens une exception lorsque le fichier .properties n'est pas présent:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx': Injection of autowired dependencies failed; nested exception is Java.lang.IllegalArgumentException: Could not resolve placeholder 'secret' in string value "${secret}"
Voici le champ annoté:
@Value("${secret}")
private String ldapSecret = "secret";
Je m'attendais dans ce cas à ce que la chaîne "secret" soit définie.
Pour répondre à votre question exactement ...
@Value("${secret:secret}")
private String ldapSecret;
Et quelques autres variations sont ci-dessous pour la complétude des exemples ...
Par défaut une chaîne à null:
@Value("${secret:#{null}}")
private String secret;
Par défaut un nombre:
@Value("${someNumber:0}")
private int someNumber;
Il suffit d'utiliser:
@Value("${secret:default-secret-value}")
private String ldapSecret;
@Value and Property Examples
To set a default value for property placeholder :
${property:default value}
Few examples :
//@PropertySource("classpath:/config.properties}")
//@Configuration
@Value("${mongodb.url:127.0.0.1}")
private String mongodbUrl;
@Value("#{'${mongodb.url:172.0.0.1}'}")
private String mongodbUrl;
@Value("#{config['mongodb.url']?:'127.0.0.1'}")
private String mongodbUrl;