Profil par défaut au spring 3.1

Dans mon application, j’ai des beans annotés avec @Profile("prod") et @Profile("demo") . Le premier, comme vous pouvez le deviner :), est utilisé sur les beans qui se connectent à la DB de production et le second annote les beans qui utilisent une fausse firebase database ( HashMap ou autre) pour accélérer le développement.

Ce que je voudrais avoir, c’est un profil par défaut ( "prod" ) qui sera toujours utilisé s’il n’est pas remplacé par « quelque chose d’autre ».

Parfait serait d’avoir dans mon web.xml :

  spring.profiles.active prod  

puis remplacez-le par -Dspring.profiles.active="demo" pour que je puisse faire:

 mvn jetty:run -Dspring.profiles.active="demo". 

Mais malheureusement cela ne fonctionne pas. Toute idée de comment pourrais-je y arriver? Définir -Dspring.profiles.active="prod" sur tous mes environnements n’est pas une option.

Mon expérience est que l’utilisation de

 @Profile("default") 

le haricot ne sera ajouté au contexte que si aucun autre profil n’est identifié. Si vous passez un profil différent, par exemple -Dspring.profiles.active="demo" , ce profil est ignoré.

Définissez votre environnement de production en tant que profil par défaut dans votre fichier web.xml

  spring.profiles.default prod  

et si vous souhaitez utiliser un profil différent, transmettez-le en tant que propriété système

 mvn -Dspring.profiles.active="demo" jetty:run 

Vous pouvez également envisager de supprimer le profil PROD et d’utiliser @Profile (“! Demo”)

J’ai le même problème, mais j’utilise WebApplicationInitializer pour configurer le ServletContext par programmation (Servlet 3.0+). Donc je fais ce qui suit:

 public class WebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext sc) throws ServletException { // Create the 'root' Spring application context final AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); // Default active profiles can be overridden by the environment variable 'SPRING_PROFILES_ACTIVE' rootContext.getEnvironment().setDefaultProfiles("prod"); rootContext.register(AppConfig.class); // Manage the lifecycle of the root application context sc.addListener(new ContextLoaderListener(rootContext)); } } 

A propos de la définition du profil de production par défaut déjà posté @andih

Le moyen le plus simple de définir le profil par défaut pour le plug-in maven jetty consiste à inclure l’élément dans la configuration de votre plug-in:

  org.eclipse.jetty jetty-maven-plugin    spring.profiles.active demo     

Spring fournit deux propriétés distinctes pour déterminer quels profils sont actifs:

  • spring.profiles.active

et

  • spring.profiles.default

Si spring.profiles.active est défini, sa valeur détermine quels profils sont actifs. Mais si spring.profiles.active n’est pas défini, Spring se spring.profiles.default. vers spring.profiles.default.

Si ni spring.profiles.active ni spring.profiles.default n’est défini, il n’y a pas de profils actifs et seuls les beans qui ne sont pas définis comme étant dans un profil sont spring.profiles.active spring.profiles.default bean qui ne spécifie pas de profil appartient à profil default

Vous pouvez configurer votre fichier web.xml en tant que ressource filtrée et avoir cette valeur remplie par maven à partir des parameters du profil maven – c’est ce que nous faisons.

dans pom filtre toutes les ressources (vous pouvez faire ça si vous n’avez pas de marquage $ {})

   src/main/webapp true   

dans web.xml put

  spring.profiles.active ${spring.prfile}  

en pom créer des profils maven

   DEFAULT  true   prod    DEMO  demo    

Maintenant, vous pouvez utiliser

 mvn jetty:run -P DEMO 

ou simplement -P DEMO avec n’importe quelle commande maven