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 ?

5voto

Sylhare Points 647

Pour modifier un peu les choses afin de gérer le cas où la variable n'est pas définie, vous pourriez utiliser un fichier valeur par défaut :

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

De cette façon, si spring.profiles.active est définie, il la prendra sinon il prendra la valeur par défaut unknown .

Aucune exception ne sera donc déclenchée. Et il n'est pas nécessaire de forcer l'ajout de quelque chose comme @ActiveProfiles("test") dans votre test pour le faire passer.

4voto

Michael Points 20266

Il semble qu'il y ait une demande pour pouvoir y accéder de manière statique.

Comment puis-je obtenir une telle chose dans les méthodes statiques d'une classe non gérée par ressort non gérées par ressort ? - Aetherus

C'est un hack, mais vous pouvez écrire votre propre classe pour l'exposer. Vous devez faire attention à ce que rien n'appelle SpringContext.getEnvironment() avant que tous les beans aient été créés, car il n'y a aucune garantie que ce composant sera instancié.

@Component
public class SpringContext
{
    private static Environment environment;

    public SpringContext(Environment environment) {
        SpringContext.environment = environment;
    }

    public static Environment getEnvironment() {
        if (environment == null) {
            throw new RuntimeException("Environment has not been set yet");
        }
        return environment;
    }
}

3voto

embuc Points 364

Et si vous ne voulez ni utiliser @Autowire ni injecter @Value, vous pouvez simplement le faire (avec le fallback inclus) :

System.getProperty("spring.profiles.active", "unknown");

Cela renverra tout profil actif (ou la valeur "inconnu").

2voto

nazar_art Points 1445

Comme déjà mentionné plus haut. Vous pourriez automatiser l'environnement :

@Autowire
private Environment environment;

seulement vous pourriez faire la vérification de l'environnement nécessaire beaucoup plus facilement :

if (environment.acceptsProfiles(Profiles.of("test"))) {
    doStuffForTestEnv();
} else {
    doStuffForOtherProfiles();
}

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