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