Expand Gradle plugin's docs on setting bootRun's system properties

Closes gh-23578
This commit is contained in:
Andy Wilkinson 2020-10-06 14:34:39 +01:00
parent 4dad8c221a
commit 7ac14203ab
4 changed files with 79 additions and 3 deletions

View File

@ -92,9 +92,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.

View File

@ -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"
}
}
}

View File

@ -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")
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -68,4 +68,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");
}
}