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 ?
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 ?
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.
Les noms de profil sont séparés par une virgule. Commander baeldung.com/fr/spring-profiles#2-using-springactiveprofile
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
Cette ligne donne cette erreur : Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"
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.
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.
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 ?