web-dev-qa-db-fra.com

Comment obtenez-vous le profil d’environnement actif / par défaut actuel par programme au printemps?

J'ai besoin de coder différentes logiques basées sur différents profils d'environnement actuels. Comment obtenir les profils actif et par défaut actuels de Spring?

121
Bobo

Vous pouvez connecter automatiquement le Environment

@Autowired
Environment env;

Environment offre:

177
aweigold

Prolonger la réponse simple et agréable de User1648825 (je ne peux pas commenter et ma modification a été rejetée):

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

Cela peut déclencher une exception IllegalArgumentException si aucun profil n'est défini (j'obtiens une valeur null). Cela peut être une bonne chose si vous avez besoin d’être réglé; sinon, utilisez la syntaxe 'default' pour @Value, c'est-à-dire:

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

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

49
MartinMlima

Voici un exemple plus complet.

Environnement Autowire

D'abord, vous voudrez autoriser le haricot d'environnement.

@Autowired
private Environment environment;

Vérifiez si des profils existent dans les profils actifs

Vous pouvez ensuite utiliser getActiveProfiles() pour savoir si le profil existe dans la liste des profils actifs. Voici un exemple qui prend le String[] De getActiveProfiles(), obtient un flux de ce tableau, puis utilise des agents de correspondance pour rechercher plusieurs profils (insensibles à la casse) qui renvoient 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 des fonctionnalités similaires en utilisant l'annotation @Profile("local") Voici plus d'informations sur cette technique: Profils de printemps

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

Cela fonctionne et vous n'avez pas besoin de mettre en œuvre EnvironmentAware. Mais je ne connais pas les inconvénients de cette approche.

23
user1648825

Si vous n'utilisez pas le câblage automatique, implémentez simplement EnvironmentAware

13
Arnout Engelen