With Spring Boot Actuator we get some useful endpoints in our application to check on our application when it is running. One of the endpoints is the /info endpoint. We can add information about our application if Spring Boot finds a file META-INF/build-info.properties in the classpath of our application. With the Gradle Spring Boot plugin we can generate the build-info.properties file. When we apply the Gradle Spring Boot plugin to our project we get a Gradle extension springBoot in our build file. With this extension we can configure Spring Boot for our project. To generate project information that is used by the /info endpoint we must add the method statement buildInfo() inside the springBoot extension. With this method statement the Gradle Spring Boot plugin generates a file build/main/resources/META-INF/build-info.properties..
// File: build.gradle
plugins {
id 'org.springframework.boot' version '1.4.2.RELEASE'
}
...
springBoot {
// This statement tells the Gradle Spring Boot plugin
// to generate a file
// build/resources/main/META-INF/build-info.properties
// that is picked up by Spring Boot to display
// via /info endpoint.
buildInfo()
}
...
Let's run our application and send a request for /info:
$ http -b localhost:8080/info
{
"build": {
"artifact": "spring-boot-sample",
"group": "mrhaki.spring",
"name": "sample-mrhaki",
"time": 1482139076000,
"version": "0.3.0"
}
}
$
To override the default properties or to add new properties we must provide a configuration closure to the buildInfo method. If we a built-in key as the name of the property it is overridden with a new value, otherwise the key is added as a new property. In the following example we add some extra properties and override the properties time and name:
// File: build.gradle
...
springBoot {
buildInfo {
// Generate extra build info.
additionalProperties = [
by: System.properties['user.name'],
operatingSystem: "${System.properties['os.name']} (${System.properties['os.version']})",
continuousIntegration: System.getenv('CI') ? true: false,
machine: InetAddress.localHost.hostName,
// Override buildInfo property time
time: buildTime(),
// Override name property
name: 'sample-springboot-app'
]
}
}
def buildTime() {
final dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ")
dateFormat.timeZone = TimeZone.getTimeZone('GMT')
dateFormat.format(new Date())
}
...
We restart the application and invoke the /info endpoint to get more results for the build:
$ http -b localhost:8080/info
{
"build": {
"artifact": "spring-boot-sample",
"by": "mrhaki",
"continuousIntegration": "false",
"group": "mrhaki.spring",
"machine": "mrhaki-laptop-2015.local",
"name": "sample-springboot-app",
"operatingSystem": "Mac OS X (10.12.2)",
"time": "2016-12-19 09:16:50+0000",
"version": "0.3.0"
}
}
$
Written with Spring Boot 1.4.2.RELEASE.