Commit 2d3291fb authored by Andy Wilkinson's avatar Andy Wilkinson

Merge branch '2.2.x' into 2.3.x

Closes gh-23598
parents a74c538b 7ac14203
...@@ -89,9 +89,34 @@ See {gradle-api}/org/gradle/api/tasks/JavaExec.html#setArgsString-java.lang.Stri ...@@ -89,9 +89,34 @@ See {gradle-api}/org/gradle/api/tasks/JavaExec.html#setArgsString-java.lang.Stri
[[running-your-application-passing-system-properties]] [[running-your-application-passing-system-properties]]
=== Passing System properties to your application === 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. 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.
......
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"
}
}
}
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 { ...@@ -71,4 +71,17 @@ class RunningDocumentationTests {
.build("optimizedLaunch").getOutput()).contains("false"); .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");
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment