web-dev-qa-db-fra.com

Variables d'environnement facultatives dans l'application Spring

Dans application.properties De mon application Spring Boot, j'ai cette définition:

someProp=${SOME_ENV_VARIABLE}

Mais c'est une valeur optionnelle définie uniquement dans certains environnements, je l'utilise comme ceci

@Value("${someProp:#{null}}")
private String someProp;

Étonnamment, je reçois cette erreur lorsque l'env. var n'existe pas
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
Je m'attendais à ce que Spring définisse simplement une valeur vide s'il ne se trouve dans aucun PropertySource.

Comment le rendre facultatif?

13
Maxime Laval

Fournissez une valeur par défaut dans le application.properties

someProp=${SOME_ENV_VARIABLE:#{null}}

Lorsqu'il est utilisé comme @Value("${someProp}), cela sera correctement évalué à null. Premièrement, si SOME_ENV_VARIABLE N'est pas trouvé lorsque application.properties Est en cours de traitement, sa valeur devient la chaîne littérale "# {null}". Ensuite, @Value Évalue someProp comme une expression SpEL, ce qui donne null. La valeur réelle peut être vérifiée en regardant la propriété dans le bean Environment.

Cette solution utilise la syntaxe de valeur par défaut spécifiée par la classe PlaceholderConfigurerSupport

Les valeurs de propriété par défaut peuvent être définies globalement pour chaque instance de configuration via la propriété properties, ou propriété par propriété en utilisant le séparateur de valeur par défaut qui est ":" par défaut et personnalisable via setValueSeparator (String).

et Expression Spring SpEL modelant .

Depuis les documents Spring Boot sur configuration externalisée

Enfin, bien que vous puissiez écrire une expression SpEL dans @Value, ces expressions ne sont pas traitées à partir des fichiers de propriétés d'application.

17
Robert Farley