web-dev-qa-db-fra.com

Méthode annotée Spring @Value, utilisez la valeur par défaut lorsque les propriétés ne sont pas disponibles

Situation

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.

Problème

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.

7
RenatoIvancic

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;
7
Bernie Lenz

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;
0
Ahmet Karakaya