Ich versuche, ein aktives Profil in der Spring Boot-Anwendung mit Maven 3 festzulegen.
In meiner pom.xml setze ich default active profile und property spring.profiles.active auf development :
<profiles>
<profile>
<id>development</id>
<properties>
<spring.profiles.active>development</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
bei jeder Ausführung meiner Anwendung erhalte ich jedoch die folgende Meldung in Protokollen:
No active profile set, falling back to default profiles: default
und das SpringBoot-Profil ist auf Standard gesetzt (liest application.properties statt application-development.properties)
Was muss ich noch tun, um mein aktives SpringBoot-Profil mit dem Maven-Profil festzulegen?
.__ Jede Hilfe sehr geschätzt.
Das Maven-Profil und das Spring-Profil sind zwei völlig verschiedene Dinge. Ihre pom.xml definiert die spring.profiles.active
-Variable, die im Build-Prozess verfügbar ist, jedoch nicht zur Laufzeit. Deshalb ist nur das Standardprofil aktiviert.
Wie binde ich das Maven-Profil mit Spring?
Sie müssen die Build-Variable an Ihre Anwendung übergeben, damit sie beim Start verfügbar ist.
Definieren Sie einen Platzhalter in Ihrem application.properties
:
[email protected]@
Die Variable @[email protected]
muss mit der deklarierten Eigenschaft aus dem Maven-Profil übereinstimmen.
Aktivieren Sie die Ressourcenfilterung in Ihrer Datei pom.xml:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
…
</build>
Wenn der Build ausgeführt wird, werden alle Dateien im Verzeichnis src/main/resources
von Maven verarbeitet, und der Platzhalter in application.properties
wird durch die in Ihrem Maven-Profil definierte Variable ersetzt.
Für weitere Details können Sie gehen Sie zu meinem Beitrag wo ich diesen Anwendungsfall beschrieben habe.
Sie können den folgenden Befehl ausführen. Hier möchte ich mit dem Federprofil local
laufen:
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"
Sie sollten das Spring Boot Maven Plugin verwenden :
<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>
Oder eher leicht:
mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
In der Entwicklung ist die Aktivierung eines Spring Boot-Profils, wenn ein bestimmtes Maven-Profil aktiviert ist, direkt. Sie sollten die profiles
-Eigenschaft des spring-boot-maven-plugin im Maven-Profil verwenden, z.
<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>
Sie können den folgenden Befehl ausführen, um sowohl das Spring Boot- als auch das Maven development
-Profil zu verwenden:
mvn spring-boot:run -Pdevelopment
Wenn Sie Spring Boot-Profile einem Maven-Profil mit demselben Profilnamen zuordnen möchten, können Sie ein einzelnes Maven-Profil definieren und aktivieren, wenn das Vorhandensein einer Maven-Eigenschaft erkannt wird. Diese Eigenschaft ist die einzige Sache, die Sie angeben müssen, wenn Sie den Befehl mvn
ausführen.
Das Profil würde folgendermaßen aussehen:
<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>
Sie können den folgenden Befehl ausführen, um sowohl das Spring Boot-Profil als auch das Maven development
-Profil zu verwenden:
mvn spring-boot:run -Dmy.active.spring.profiles=development
oder :
mvn spring-boot:run -Dmy.active.spring.profiles=integration
oder :
mvn spring-boot:run -Dmy.active.spring.profiles=production
Und so für ...
Diese Art der Konfiguration ist sinnvoll, da Sie im generischen Maven-Profil auf die my.active.spring.profiles
-Eigenschaft angewiesen sind, die übergeben wird, um einige Aufgaben auszuführen oder einige Werte zu bewerten.
Zum Beispiel verwende ich diese Methode, um ein generisches Maven-Profil zu konfigurieren, in dem die Anwendung gepackt wird, und ein Docker-Image für die ausgewählte Umgebung zu erstellen.
Es gibt mehrere Möglichkeiten, Profile für Ihre Springboot-Anwendung festzulegen.
Sie können dies in Ihrer Property-Datei hinzufügen:
spring.profiles.active=dev
Programmatischer Weg:
SpringApplication.setAdditionalProfiles("dev");
Tests machen es sehr einfach zu bestimmen, welche Profile aktiv sind
@ActiveProfiles("dev")
In einer Unix-Umgebung
export spring_profiles_active=dev
JVM-Systemparameter
-Dspring.profiles.active=dev