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.