Spring Sweets: Add (Extra) Build Information To Info Endpoint
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.
.
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
:
...
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'
]
}
}
...
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.