191 votes

Comment obtenir le profil d'environnement actif/par défaut de manière programmatique dans Spring ?

Je dois coder une logique différente en fonction du profil de l'environnement actuel.

Comment obtenir les profils actuellement actifs et par défaut de Spring ?

4 votes

@aweigold : obtenir le profil d'environnement actif/par défaut de façon programmatique dans spring 3.1. Quels autres détails vous faut-il ?

264voto

aweigold Points 1803

Vous pouvez câbler automatiquement le Environment

@Autowired
Environment env;

Environment offres :

96voto

MartinMlima Points 762

En prolongement de la réponse simple et agréable de l'utilisateur1648825 (je ne peux pas commenter et mon édition a été rejetée) :

@Value("${spring.profiles.active}")
private String activeProfile;

Cela peut provoquer une IllegalArgumentException si aucun profil n'est défini (j'obtiens une valeur nulle). Cela peut être une bonne chose si vous avez besoin qu'il soit défini ; sinon, utilisez la syntaxe "par défaut" pour @Value, c'est-à-dire :

@Value("${spring.profiles.active:Unknown}")
private String activeProfile;

...activeProfile contient maintenant 'Unknown' si spring.profiles.active n'a pas pu être résolu.

1 votes

Les noms de profil sont séparés par une virgule. Commander baeldung.com/fr/spring-profiles#2-using-springactiveprofile

65voto

anataliocs Points 2812

Voici un exemple plus complet.

Environnement Autowire

Tout d'abord, vous voulez câbler automatiquement le haricot d'environnement.

@Autowired
private Environment environment;

Vérifier si les profils existent dans les profils actifs

Vous pouvez alors utiliser getActiveProfiles() pour savoir si le profil existe dans la liste des profils actifs. Voici un exemple qui prend le String[] de getActiveProfiles() L'utilisateur obtient un flux à partir de ce tableau, puis utilise des matrices pour vérifier l'existence de profils multiples (sensibles à la casse) et renvoie un booléen s'ils existent.

//Check if Active profiles contains "local" or "test"
if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
   env -> (env.equalsIgnoreCase("test") 
   || env.equalsIgnoreCase("local")) )) 
{
   doSomethingForLocalOrTest();
}
//Check if Active profiles contains "prod"
else if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
   env -> (env.equalsIgnoreCase("prod")) )) 
{
   doSomethingForProd();
}

Vous pouvez également obtenir une fonctionnalité similaire en utilisant l'annotation @Profile("local") Les profils permettent une configuration sélective en fonction d'un paramètre transmis ou d'un paramètre d'environnement. Voici de plus amples informations sur cette technique : Profils de printemps

30voto

user1648825 Points 803
@Value("${spring.profiles.active}")
private String activeProfile;

Cela fonctionne et vous n'avez pas besoin d'implémenter EnvironmentAware. Mais je ne connais pas les inconvénients de cette approche.

6 votes

Cette ligne donne cette erreur : Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"

0 votes

Cela fonctionne parfaitement pour moi. J'utilise Spring Boot 1.5.15.

0 votes

Je pense que si le profil est défini, la valeur sera analysée, sinon l'exception se produit. Cela ne convient pas à toutes les situations.

14voto

Arnout Engelen Points 2106

Si vous n'utilisez pas le câblage automatique, mettez simplement en place EnvironmentAware

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X