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 starte meine App mit bootRun im Gradle-Plugin auf meinem lokalen Computer. Ich werde dieselbe Application War-Datei in allen anderen Umgebungen bereitstellen, in denen Tomcat ausgeführt wird.
Ich habe versucht hinzuzufügen:
--spring.profiles.active = local
zur Ausführungskonfiguration unter Skriptparametern.
Ich habe versucht hinzuzufügen
-Dspring.profiles.active = lokal
zur Ausführungskonfiguration unter VM-Optionen.
Weder Arbeit. Ich sehe beim Start immer wieder die INFO-Meldung: Kein aktives Profil festgelegt, zurückgesetzt auf Standardprofile: Standard
Wenn ich meine App über die Windows-Befehlszeile mit ausführe
gradle bootRun
aber ich habe zuerst die Umgebungsvariable gesetzt
set SPRING_PROFILES_ACTIVE=local
Dann funktioniert alles.
Meine Frage ist also, wie ich mein lokales Spring-Boot-Profil aktiviere, wenn ich bootRun von IntelliJ aus starte.
quelle
Antworten:
Ich
-Dspring.profiles.active=test
habe VM-Optionen hinzugefügt und diese Konfiguration erneut ausgeführt. Es hat perfekt funktioniert.Dies kann eingestellt werden durch
Run | Edit Configurations...
Configuration
RegisterkarteEnvironment
Abschnitt, um ihn anzuzeigenVM options
quelle
Wenn Sie tatsächlich Spring Boot Run-Konfigurationen verwenden (derzeit nur in der Ultimate Edition unterstützt), können Sie die Profile in der Einstellung "Aktive Profile" einfach vorkonfigurieren.
quelle
args
in IhremApplication.main()
zBSpringApplication.run( Application.class, args );
Fügen Sie diesen Befehl in Ihr build.gradle ein
Konfigurieren Sie zum Ausführen diese Form:
quelle
Spring Boot hat anscheinend die Art und Weise, wie die VM-Optionen gelesen werden, im Laufe der Entwicklung geändert. Hier ist eine Möglichkeit, dies zu versuchen, wenn Sie eine Anwendung in Intellij starten und ein Profil aktivieren möchten:
1. Ändern Sie die VM-Optionen
Öffnen Sie "Konfiguration bearbeiten" unter "Ausführen" und fügen Sie unter "VM-Optionen" Folgendes hinzu:
-Dspring.profiles.active=local
Es funktioniert tatsächlich mit einem meiner Projekte mit
Spring Boot v2.0.3.RELEASE
undSpring v5.0.7.RELEASE
, aber nicht mit einem anderen Projekt mitSpring Boot v2.1.1.RELEASE
undSpring v5.1.3.RELEASE
.Beim Laufen mit Maven oder JAR wurde Folgendes erwähnt:
oder
(Siehe hier: Verwendung von Spring Boot-Profilen )
2. Übergeben von JVM-Argumenten
Es wird irgendwo erwähnt, dass Spring die Art und Weise des Startens des Anwendungsprozesses ändert, wenn Sie einige JVM-Optionen angeben. Es gabelt einen anderen Prozess und übergibt das empfangene Argument nicht, sodass dies nicht funktioniert. Der einzige Weg, um Argumente an ihn weiterzugeben, ist:
Auch dies ist für Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html
3. Einstellung (Anwendung) env var
Was für mich beim zweiten Projekt funktioniert, war das Festlegen der Umgebungsvariablen, wie in einer Antwort oben erwähnt: "Konfiguration bearbeiten" - "Umgebungsvariable" und:
quelle
SPRING_PROFILES_ACTIVE
.~/.profile
oder ähnliches, müssen Sie verwendenSPRING_PROFILES_ACTIVE
-spring.profiles.active
funktioniert wahrscheinlich nur als Argument in der Befehlszeile.Am Ende habe ich meinem build.gradle Folgendes hinzugefügt:
Wenn Sie also bootRun von IntelliJ aus 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 erhalten: https://github.com/spring-projects/spring-boot/pull/592
quelle
Eine wahrscheinliche Ursache könnte sein, dass Sie die Befehlszeilenparameter nicht an die Hauptmethode der Anwendung übergeben. Ich habe vor einigen Wochen den gleichen Fehler gemacht.
quelle
Application
Klasse beim Erstellen mit Gradle nicht automatisch generiert, sondern von Hand aus dem Speicher. Derargs
Schritt wurde verpasst , und daher funktionierte das Feld "Aktive Profile" in der Ausführungskonfiguration nicht. Ich musste-Dspring.profiles.active
das Feld "VM-Optionen" manuell übergeben .Ich benutze die Intellij Community Edition. Gehen Sie zu "Run / Debug Configurations"> Registerkarte "Runner"> "Umgebungsvariablen"> klicken Sie auf die Schaltfläche "...". Hinzufügen: SPRING_PROFILES_ACTIVE = local
spring.profiles.active
quelle
Für Spring Boot 2.1.0 und höher können Sie verwenden
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
quelle
spring-boot:run -Dspring-boot.run.profiles=local
In meinem Fall, in dem ich die folgende Konfiguration bei VM-Optionen in verwendet habe
IntelliJ
, wurden nicht die lokalen Konfigurationen ausgewählt, sondern nach einem Neustart wurdenIntelliJ
Konfigurationsdetails ausgewähltIntelliJ
und der Dienst wurde ausgeführt.quelle
Versuche dies. Bearbeiten Sie Ihre build.gradle-Datei wie folgt.
quelle
Sie können den obigen Weg versuchen, um ein Profil zu aktivieren
quelle
Stellen Sie
-Dspring.profiles.active=local
unter Programmargumente.quelle