Ich verwende das Gradle spring-boot
-Plugin und muss für den Testlauf ein aktives Profil auswählen.
Wie übergebe ich die spring.profiles.active
-Systemeigenschaft an die Aufgabe des bootRun
-Plugins?
Was ist schon gescheitert:
task bootRunLocal {
systemProperty "spring.profiles.active", "local"
System.setProperty("spring.profiles.active", "local")
tasks.bootRun.execute() // I suspect that this task is executed in a separate JVM
}
und einige Befehlszeilenmagie schlägt auch fehl:
./gradle -Dspring.profiles.active=local bootRun
Könnte mir jemand helfen, meine Probleme zu lösen?
Update aus den Antworten und Kommentaren:
Ich kann die systemProperty einstellen und an den Federcontainer übergeben, indem Sie Folgendes tun:
run {
systemProperty "spring.profiles.active", "local"
}
Wenn ich dies jedoch mache, wird das lokale Profil für die bootRun
-Task und die bootRunLocal
-Task festgelegt. Ich brauche eine Möglichkeit, diese Eigenschaft für bootRunLocal
task festzulegen und booRun
task von bootRunLocal
aufzurufen.
Das hört sich vielleicht sehr einfach an, aber ich komme mit Frieden aus der strukturierten Welt von Maven.
task local {
run { systemProperty "spring.profiles.active", "local" }
}
bootRun.mustRunAfter local
Führen Sie dann den gradle-Befehl aus als:
gradle bootRun local
Ich weiß, ich bin spät dran ... aber vor genau diesem Problem habe ich mich kürzlich getroffen. Ich habe versucht, bootRun mit spring.profiles.active und spring.config.location als Systemeigenschaften in der Befehlszeile zu starten.
Damit Ihre Befehlszeile "magisch" funktioniert, fügen Sie dies einfach zu Ihrem build.gradle hinzu
bootRun {
systemProperties System.properties
}
Dann von der Kommandozeile aus laufen ...
gradle -Dspring.profiles.active=local bootRun
Wird lokal als aktives Profil festgelegt, ohne dass eine separate Aufgabe definiert werden muss, nur um die Variable env hinzuzufügen.
Es gibt keine generische Möglichkeit, Systemeigenschaften an eine Aufgabe zu übergeben. Kurz gesagt, es wird nur für Aufgaben unterstützt, die eine separate JVM bilden.
Die bootRunLocal
-Task (wie oben definiert) wird nicht in einer separaten JVM ausgeführt, und der Aufruf von execute()
für eine Task wird nicht unterstützt (und müsste in jedem Fall in der Ausführungsphase erfolgen). Tests dagegen werden immer in einer separaten JVM ausgeführt (wenn sie von einer Test
-Task ausgeführt werden). Um die Systemeigenschaften für die Testausführung festzulegen, müssen Sie die entsprechenden Test
-Task (s) konfigurieren. Zum Beispiel:
test {
systemProperty "spring.profiles.active", "local"
}
Weitere Informationen finden Sie unter Test
in der Gradle-Referenz für die Build-Sprache .
Für Gradle 2.14 unten funktioniert das Beispiel. Ich habe wie folgt hinzugefügt.
Wenn System.properties ['spring.profiles.active'] null ist, wird das Standardprofil festgelegt.
bootRun {
systemProperty 'spring.profiles.active', System.properties['spring.profiles.active']
}
befehlszeilenbeispiel
gradle bootRun -Dspring.profiles.active=dev
Nur als Referenz, wenn jemand dieses Problem hat:
Die Antwort von Vlad hat für mich nicht ganz funktioniert, aber diese funktioniert gut mit 2.4,
task local <<{
bootRun { systemProperty "spring.profiles.active", "local" }
}
local.finalizedBy bootRun
dann gradle local
Auf die genaue Anfrage von OP hier antworten ...
Wie übergebe ich die Systemeigenschaft spring.profiles.active an die Aufgabe des bootRun-Plugins?
Und mit "pass" vorausgesetzt, das OP bedeutete "pass from commandline" oder "pass from IDE" - Aufruf "... So mache ich das gerne.
Fügen Sie dies zu build.gradle hinzu:
/**
* Task from spring-boot-gradle-plugin, configured for easier development
*/
bootRun {
/* Lets you pick Spring Boot profile by system properties, e.g. gradle bootRun -Dspring.profiles.active=dev */
systemProperties = System.properties
}
Wenn Sie es aufrufen, verwenden Sie dann das bekannte Java-Flag zum Festlegen einer Systemeigenschaft
gradle bootRun -Dspring.profiles.active=local
Es gibt einen Hauptvorteil der Beibehaltung der Systemeigenschaften gegenüber der Umgebungsvariablenoption (SPRING_PROFILES_ACTIVE=local gradle bootRun
) ... und dies ist eine einfache Portierbarkeit zwischen Linux/OS X (Bash usw.) und Windows (cmd.exe).
Ich habe diesen Weg aus diesem Blogbeitrag gelernt.
(UPDATE: Ah, irgendwie hatte ich @ Erichs Antwort mit derselben Empfehlung verpasst. Hoppla! Ich lasse meine Antwort wegen der zusätzlichen Details zur Portabilität usw.)
Sie können eine neue Aufgabe erstellen (im besprochenen Fall mit dem Namen bootRunLocal
), die die Eigenschaften von org.springframework.boot.gradle.run.BootRunTask
und die Setup-Eigenschaften vor der Ausführung der Aufgabe erweitert. Sie können eine solche Aufgabe mit folgendem Code erstellen:
task bootRunLocal(type: org.springframework.boot.gradle.run.BootRunTask) {
doFirst() {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
systemProperty "spring.profiles.active", "local"
}
}
Weitere Einzelheiten finden Sie hier: https://karolkalinski.github.io/gradle-task-that-runs-spring-boot-aplication-with-profile-activated/
Entsprechend der spring-boot-gradle-plugin-Dokumentation sollten Sie solche Argumente übergeben können
./gradlew bootRun --args='--spring.profiles.active=dev'
Es scheint, dass dies seit 4.9 ein neues Gradle-Feature ist. Ich habe es in meinem Projekt verwendet und es hat sich ohne Probleme bewährt.
Das funktioniert:
SPRING_PROFILES_ACTIVE = produktion ./gradlew app-service: bootRun
Ab SpringBoot 2.0.0-M5 ist setSystemProperties()
keine Methode der Task bootRun ..__ mehr. Das build.gradle muss aktualisiert werden
bootRun {
execSpec {
// System.properties["spring.profiles.active"]
systemProperties System.properties
}
}
Dies ist, da springBoots Laufaufgabe org.gradle.process.JavaExecSpec
verwendet.
Dies funktioniert für mich mit Gradle 4.2
Eine andere Möglichkeit, die keine Unterstützung von der Gradle-Task erfordert: Setzen Sie die Umgebungsvariable Java_TOOL_OPTIONS :
Java_TOOL_OPTIONS='-Dfoo=bar' gradle ...
Oder wenn die Variable bereits nützliche Informationen enthält:
Java_TOOL_OPTIONS="$Java_TOOL_OPTIONS -Dfoo=bar" gradle ...
// defualt value
def profiles = 'dev'
bootRun {
args = ["--spring.profiles.active=" + profiles]
}
Dann können Sie einfach eine bestimmte Version auswählen, wenn Sie eine Gradle-Aufgabe starten, wie z
./gradlew bootRun -P dev
"dev" wird stattfinden "prod"
mit dem Befehl run können Sie die Build-Datei run { systemProperties = System.properties }
hinzufügen und mit Gradle run -Dspring.profiles.active=local
beginnen.