99 votes

Profil par défaut dans Spring 3.1

Dans mon application, j'ai des beans annotés de @Profile("prod") y @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 DB ( HashMap ou autre) - pour accélérer le développement.

Ce que j'aimerais avoir, c'est un profil par défaut ( "prod" ) qui sera toujours utilisée si elle n'est pas remplacée par " quelque chose d'autre ".

L'idéal serait d'avoir dans mon web.xml :

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>prod</param-value>
</context-param>

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

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

Mais malheureusement, cela ne fonctionne pas. Avez-vous une idée de la façon dont je pourrais y parvenir ? Réglage de -Dspring.profiles.active="prod" sur tous mes environnements n'est pas une option.

110voto

andih Points 2171

Définissez votre environnement de production comme profil par défaut dans votre web.xml.

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>prod</param-value>
</context-param>

et si vous voulez utiliser un profil différent, passez-le comme propriété du système

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

67voto

Paul Philion Points 141

D'après mon expérience, l'utilisation de

@Profile("default")

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

5voto

bla Points 863

Vous pouvez également envisager de supprimer le profil PROD, et utiliser @Profile("!demo")

3voto

Jakub Kubrynski Points 3295

A propos de l'établissement du profil de production par défaut déjà posté @andih

La façon la plus simple de définir le profil par défaut pour le plugin maven jetty, est d'inclure l'élément ci-dessous dans la configuration de votre plugin :

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <systemProperties>
            <systemProperty>
                <name>spring.profiles.active</name>
                <value>demo</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>

-1voto

Hurda Points 1992

Vous pouvez configurer votre web.xml comme ressource filtrée et faire remplir cette valeur par maven à partir des paramètres du profil maven - c'est ce que nous faisons.

dans pom filtrer toutes les ressources (vous pouvez le faire si vous n'avez pas de marquage ${} dans celles-ci)

<webResources>
    <resource>
        <directory>src/main/webapp</directory>
        <filtering>true</filtering>
    </resource>
</webResources>

dans web.xml mettre

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>${spring.prfile}</param-value>
</context-param>

dans pom créer des profils maven

<profiles>
    <profile>
        <id>DEFAULT</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>prod</spring.profile>
        </properties>
    <profile>
    <profile>
        <id>DEMO</id>
        <properties>
            <spring.profile>demo</spring.profile>
        </properties>
    <profile>
</profiles>

Vous pouvez maintenant utiliser

mvn jetty:run -P DEMO

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

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