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.
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.
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.
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.
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"
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>
Ou plutôt facilement:
mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
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é.
Il existe plusieurs façons de définir des profils pour votre application springboot.
Vous pouvez ajouter ceci dans votre fichier de propriété:
spring.profiles.active=dev
Manière programmatique:
SpringApplication.setAdditionalProfiles("dev");
Les tests permettent très facilement de spécifier quels profils sont actifs
@ActiveProfiles("dev")
Dans un environnement Unix
export spring_profiles_active=dev
Paramètre système JVM
-Dspring.profiles.active=dev