Ich habe 5 Umgebungen:
- local (my development machine)
- dev
- qc
- uat
- live
- staging
Ich möchte, dass für jede Umgebung unterschiedliche Anwendungseigenschaften verwendet werden. Daher habe ich die folgenden Eigenschaftendateien, die jeweils eine andere URL für die Datenquelle haben:
- application.properties (containing common properties)
- application-local.properties
- application-dev.properties
- application-qc.properties
- application-uat.properties
- application-live.properties
Ich verwende IntelliJ und führe meine App mit bootRun im Gradle-Plugin auf meinem lokalen Computer aus. Ich werde in allen anderen Umgebungen, in denen Tomcat ausgeführt wird, dieselbe Anwendungs-War-Datei bereitstellen.
Ich habe versucht, Folgendes hinzuzufügen:
--spring.profiles.active = local
zur Laufkonfiguration unter Skriptparametern.
Ich habe versucht, hinzuzufügen
-Dspring.profiles.active = local
zur Laufkonfiguration unter VM - Optionen.
Weder Arbeit. Ich sehe die INFO-Nachricht beim Start immer wieder und sage: Kein aktiver Profilsatz, der auf Standardprofile zurückgreift: default
Wenn ich meine App von der Windows-Befehlszeile aus mit ausführe
gradle bootRun
aber ich habe zuerst die Umgebungsvariable gesetzt
set SPRING_PROFILES_ACTIVE=local
Dann funktioniert alles.
Meine Frage lautet also: Wie aktiviere ich mein lokales Spring Boot-Profil, wenn Sie bootRun von IntelliJ ausführen?
Ich habe in Edit-Konfigurationen gegangen ...
Ich habe -Dspring.profiles.active=test
zu VM Options hinzugefügt und diese Konfiguration dann erneut ausgeführt. Es hat perfekt funktioniert.
Am Ende habe ich folgendes zu meinem build.gradle hinzugefügt:
bootRun {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}
test {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}
Wenn Sie nun bootRun von IntelliJ ausführen, wird standardmäßig das "lokale" Profil verwendet.
In unseren anderen Umgebungen setzen wir einfach die Umgebungsvariable 'SPRING_PROFILES_ACTIVE' in Tomcat.
Ich habe dies aus einem Kommentar hier gefunden: https://github.com/spring-projects/spring-boot/pull/592
Eine wahrscheinliche Ursache könnte darin bestehen, dass Sie die Befehlszeilenparameter nicht an die Hauptmethode der Anwendung übergeben. Ich habe vor einigen Wochen denselben Fehler gemacht.
public static final void main(String... args) {
SpringApplication.run(Application.class, args);
}
Ich verwende die Intellij Community Edition . Gehen Sie zu "Run/Debug Configurations"> Registerkarte Runner> Umgebungsvariablen> Klicken Sie auf die Schaltfläche "...". Fügen Sie Folgendes hinzu: SPRING_PROFILES_ACTIVE = local
Spring Boot scheint die Lesart der Optionen für VM geändert zu haben. Versuchen Sie es einmal, wenn Sie eine Anwendung in Intellij starten und ein Profil aktivieren möchten:
Öffnen Sie "Konfiguration bearbeiten" unter "Ausführen" und fügen Sie unter "VM-Optionen" Folgendes hinzu: -Dspring.profiles.active=local
Es funktioniert eigentlich mit einem meiner Projekte mit Spring Boot v2.0.3.RELEASE
und Spring v5.0.7.RELEASE
, nicht jedoch mit einem anderen Projekt mit Spring Boot v2.1.1.RELEASE
und Spring v5.1.3.RELEASE
.
Beim Laufen mit Maven oder JAR wurde dies auch erwähnt:
mvn spring-boot:run -Drun.profiles=dev
oder
Java -jar -Dspring.profiles.active=dev XXX.jar
(Siehe hier: wie man Spring Boot-Profile verwendet )
Es wird irgendwo erwähnt, dass Spring die Art und Weise des Startens des Anwendungsprozesses ändert, wenn Sie einige JVM-Optionen angeben. Er forciert einen anderen Prozess und wird das Argument, das er erhalten hat, nicht übergeben, sodass dies nicht funktioniert. Die einzige Möglichkeit, Argumente zu übergeben, ist:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."
Dies ist wieder für Maven . https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html
Was für mich beim zweiten Projekt funktioniert, war das Setzen der Umgebungsvariable, wie oben in einer Antwort erwähnt: "Konfiguration bearbeiten" - "Umgebungsvariable", und:
spring.profiles.active=local
Für Spring Boot 2.1.0 und höher können Sie verwenden
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
Versuche dies. Bearbeiten Sie Ihre build.gradle-Datei wie folgt.
ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }