Merge branch '2.3.x'

Closes gh-23599
pull/23602/head
Andy Wilkinson 4 years ago
commit 94884f201c

@ -89,9 +89,34 @@ See {gradle-api}/org/gradle/api/tasks/JavaExec.html#setArgsString-java.lang.Stri
[[running-your-application-passing-system-properties]]
=== Passing System properties to your application
Since `bootRun` is a standard `JavaExec` task, system properties can be passed to the application's JVM by specifying them in the build script.
The values can be parameterized and passed as properties on the command line using the `-P` flag.
To make that value of a system property to be configurable set its value using a {gradle-dsl}/org.gradle.api.Project.html#N14FE1[project property].
To allow a project property to be optional, reference it using `findProperty`.
Doing so also allows a default value to be provided using the `?:` Elvis operator, as shown in the following example:
See {gradle-api}/org/gradle/api/tasks/JavaExec.html#systemProperty-java.lang.String-java.lang.Object-[the javadoc for `JavaExec.systemProperty`] for further details.
[source,groovy,indent=0,subs="verbatim,attributes",role="primary"]
.Groovy
----
include::../gradle/running/boot-run-system-property.gradle[tags=system-property]
----
[source,kotlin,indent=0,subs="verbatim,attributes",role="secondary"]
.Kotlin
----
include::../gradle/running/boot-run-system-property.gradle.kts[tags=system-property]
----
The preceding example sets that `com.example.property` system property to the value of the `example` project property.
If the `example` project property has not been set, the value of the system property will be `default`.
Gradle allows project properties to be set in a variety of ways, including on the command line using the `-P` flag, as shown in the following example:
[source,bash,indent=0,subs="verbatim,attributes"]
----
$ ./gradlew -Pexample=custom
----
The preceding example sets the value of the `example` project property to `custom`.
`bootRun` will then use this as the value of the `com.example.property` system property.

@ -0,0 +1,18 @@
plugins {
id 'java'
id 'org.springframework.boot' version '{version}'
}
// tag::system-property[]
bootRun {
systemProperty 'com.example.property', findProperty('example') ?: 'default'
}
// end::system-property[]
task configuredSystemProperties {
doLast {
bootRun.systemProperties.each { k, v ->
println "$k = $v"
}
}
}

@ -0,0 +1,20 @@
import org.springframework.boot.gradle.tasks.run.BootRun
plugins {
java
id("org.springframework.boot") version "{version}"
}
// tag::system-property[]
tasks.getByName<BootRun>("bootRun") {
systemProperty("com.example.property", findProperty("example") ?: "default")
}
// end::system-property[]
task("configuredSystemProperties") {
doLast {
tasks.getByName<BootRun>("bootRun").systemProperties.forEach { k, v ->
println("$k = $v")
}
}
}

@ -71,4 +71,17 @@ class RunningDocumentationTests {
.build("optimizedLaunch").getOutput()).contains("false");
}
@TestTemplate
void bootRunSystemPropertyDefaultValue() throws IOException {
assertThat(this.gradleBuild.script("src/main/gradle/running/boot-run-system-property")
.build("configuredSystemProperties").getOutput()).contains("com.example.property = default");
}
@TestTemplate
void bootRunSystemPropetry() throws IOException {
assertThat(this.gradleBuild.script("src/main/gradle/running/boot-run-system-property")
.build("-Pexample=custom", "configuredSystemProperties").getOutput())
.contains("com.example.property = custom");
}
}

Loading…
Cancel
Save