it-swarm.com.de

Einstellen des aktiven Profils und des Konfigurationsverzeichnisses über die Befehlszeile im Frühjahrsstart

Ich habe eine Springboot-Anwendung.

Ich habe drei Profile in meiner Anwendung-> Entwicklung, Staging und Produktion. Also habe ich 3 Dateien

  1. anwendungsentwicklung.yml
  2. application-staging.yml
  3. application-production.yml

Mein application.yml befindet sich in src/main/resources. Ich habe das aktive Profil in application.yml wie folgt eingestellt:

spring:
  profiles.active: development

Die anderen 3 profilspezifischen Konfigurationsdateien befinden sich im Ordner C:\config.

Ich benutze Gradle Plugin für Eclipse. Wenn ich versuche, ein "bootRun" auszuführen, setze ich die Befehlszeilenargumente in meiner Gradle-Konfiguration in Eclipse als

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

Die Befehlszeileneigenschaft wird jedoch nicht wiedergegeben und mein aktives Profil wird immer als Entwicklung festgelegt (das ist das, das ich in der Datei applications.yml erwähnt habe). Auch der Ordner C:\Config wird nicht nach profilspezifischen Konfigurationsdateien durchsucht.

Ich glaube, ich vermisse hier etwas. Ich habe in den letzten 2 Tagen versucht, es herauszufinden. Aber kein glück Ich würde mich über jede Hilfe sehr freuen.

116
O-OF-N

Ich musste folgendes hinzufügen:

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    String confLoc = System.properties['spring.config.location']
    systemProperty "spring.profiles.active", activeProfile
    systemProperty "spring.config.location", "file:$confLoc"
}

Und jetzt nimmt bootRun das Profil und die Konfigurationspositionen auf.

Vielen Dank @jst für den Hinweis.

15
O-OF-N

Es gibt zwei verschiedene Möglichkeiten, Federeigenschaften in der Befehlszeile hinzuzufügen/zu überschreiben.

Option 1: Java Systemeigenschaften (VM-Argumente)

Es ist wichtig, dass die -D-Parameter vor Ihrer application.jar stehen, andernfalls werden sie nicht erkannt.

Java -jar -Dspring.profiles.active=prod application.jar


Option 2: Programmargumente

Java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
243
RenRen
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

das ist nicht richtig.

sollte sein:

--spring.profiles.active=staging --spring.config.location=C:\Config
10
Michael Yin

sie können die folgende Befehlszeile verwenden:

Java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
8
Rollen Holt

Es gibt eine andere Möglichkeit, indem Sie die Variable [~ # ~] os [~ # ~] , SPRING_PROFILES_ACTIVE .

für zB:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

Hinweis: So stellen Sie aktive Federprofile ein

7
Rothin Sen

Wenn Sie das Profil über das Maven-Plugin einstellen, müssen Sie es über run.jvmArguments

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

Mit Debug Option:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"

Ich habe diese Reise eine Menge Leute gesehen ... hoffe, es hilft

7
JARC

In der Regel wird dies als VM "-D" -Argument definiert. Beachten Sie die Unterschiede zwischen Spring Boot 1.x und 2.x.

Die zu aktivierenden Profile können in der Befehlszeile angegeben werden:

Spring-Boot 2.x.

-Dspring-boot.run.profiles=local

Spring-Boot 1.x

-Dspring.profiles.active=local

Beispiel mit maven:

Spring-Boot 2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

Spring-Boot 1.x

mvn spring-boot:run -Dspring.profiles.active=local

Stellen Sie sicher, dass Sie sie für mehrere Profile mit einem Komma trennen:

mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar
4
Sma Ma

Ich denke, Ihr Problem hängt wahrscheinlich mit Ihrer spring.config.location zusammen, die den Pfad nicht mit "/" beendet.

Zitiere die Dokumente

Wenn spring.config.location Verzeichnisse enthält (im Gegensatz zu Dateien), sollten diese mit/enden (und vor dem Laden mit den aus spring.config.name generierten Namen versehen werden).

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files

3
jst

Die Antwort von Michael Yin ist richtig, aber eine bessere Erklärung scheint erforderlich zu sein!

Viele von Ihnen haben erwähnt, dass -D ist der richtige Weg, um JVM-Parameter anzugeben, und Sie haben absolut Recht. Aber Michael hat auch Recht, wie in der Spring Boot Profiles Dokumentation erwähnt.

Was in der Dokumentation nicht klar ist, ist, um welche Art von Parameter es sich handelt: --spring.profiles.active ist kein Standard-JVM-Parameter. Wenn Sie ihn also in Ihren IDE füllen Sie die richtigen Felder aus (d. h. Programmargumente).

2
Eric Taix