web-dev-qa-db-fra.com

Configurer le profil actif dans Spring Boot via Maven

J'essaie de définir un profil actif dans l'application Spring Boot à l'aide de Maven 3.
Dans mon pom.xml, j'ai défini le profil actif par défaut et la propriété spring.profiles.active à développement :

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <spring.profiles.active>development</spring.profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

mais chaque fois que j'exécute mon application, le message suivant est consigné dans les journaux:

No active profile set, falling back to default profiles: default

et le profil SpringBoot est défini sur défaut (lit application.properties à la place application-development.properties)

Que dois-je faire d'autre pour que mon profil actif SpringBoot soit défini à l'aide du profil Maven?
Toute aide hautement appréciée.

15
Michał Szewczyk

Le profil Maven et le profil Spring sont deux choses complètement différentes. Votre pom.xml définit la variable spring.profiles.active qui est disponible dans le processus de construction, mais pas au moment de l'exécution. C'est pourquoi seul le profil par défaut est activé.

Comment lier le profil Maven à Spring?

Vous devez transmettre la variable de génération à votre application afin qu'elle soit disponible au démarrage.

  1. Définissez un espace réservé dans votre application.properties:

    [email protected]@
    

    La variable @spring.profiles.active@ doit correspondre à la propriété déclarée du profil Maven.

  2. Activer le filtrage des ressources dans votre pom.xml:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        …
    </build>
    

    Lors de l'exécution de la construction, tous les fichiers du répertoire src/main/resources seront traités par Maven et l'espace réservé dans votre application.properties sera remplacé par la variable que vous avez définie dans votre profil Maven. 

Pour plus de détails, vous pouvez aller à mon post où j'ai décrit ce cas d'utilisation.

33
Daniel Olszewski

Vous pouvez exécuter en utilisant la commande suivante. Ici, je veux exécuter en utilisant le profil de ressort local:

spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"

6
Justin Joseph

Vous devez utiliser le Spring Boot Maven Plugin :

<project>  
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.5.1.RELEASE</version>
        <configuration>
          <profiles>
            <profile>foo</profile>
            <profile>bar</profile>
          </profiles>
        </configuration>
        ...
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
4
SaWo

Ou plutôt facilement:

mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
3
Thomas Escolan

En développement, l'activation d'un profil Spring Boot lorsqu'un profil Maven spécifique est activé est simple. Vous devez utiliser la propriété profiles du spring-boot-maven-plugin dans le profil Maven, par exemple:

<project>
    <...>
    <profiles>
        <profile>
            <id>development</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <profiles>
                                <profile>development</profile>
                            </profiles>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    <profiles>
    </...>
</project>

Vous pouvez exécuter la commande suivante pour utiliser les profils Spring Boot et Maven development:

mvn spring-boot:run -Pdevelopment

Si vous souhaitez pouvoir mapper tout profil Spring Boot sur un profil Maven portant le même nom, vous pouvez définir un seul profil Maven et l'activer lorsque la présence d'une propriété Maven est détectée. Cette propriété est la seule chose que vous devez spécifier lorsque vous exécutez la commande mvn.
Le profil ressemblerait à ceci:

    <profile>
        <id>spring-profile-active</id>
        <activation>
            <property>
                <name>my.active.spring.profiles</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <profiles>
                            <profile>${my.active.spring.profiles}</profile>
                        </profiles>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

Et vous pouvez exécuter la commande suivante pour utiliser les profils Spring Boot et Maven development:

mvn spring-boot:run -Dmy.active.spring.profiles=development

ou :

mvn spring-boot:run -Dmy.active.spring.profiles=integration

ou :

 mvn spring-boot:run -Dmy.active.spring.profiles=production

Et ainsi pour ...

Ce type de configuration est logique car dans le profil générique Maven, vous utilisez la propriété my.active.spring.profiles qui est transmise pour effectuer certaines tâches ou valoriser certaines choses.
Par exemple, j’utilise cette méthode pour configurer un profil Maven générique qui empaquette l’application et crée une image de menu fixe spécifique à l’environnement sélectionné. 

2
davidxxx

Il existe plusieurs façons de définir des profils pour votre application springboot.

  1. Vous pouvez ajouter ceci dans votre fichier de propriété: 

    spring.profiles.active=dev
    
  2. Manière programmatique: 

    SpringApplication.setAdditionalProfiles("dev");
    
  3. Les tests permettent très facilement de spécifier quels profils sont actifs 

    @ActiveProfiles("dev")
    
  4. Dans un environnement Unix

    export spring_profiles_active=dev
    
  5. Paramètre système JVM

    -Dspring.profiles.active=dev
    
0
Pankaj Jaiswal