Spring Boot Customize Actuator Info Endpoint Example Configuration
In this tutorial, we demonstrate how to customize the spring boot actuator /info
endpoint.
Maven Dependencies
We use Apache Maven to manage our project dependencies. Make sure the following dependencies reside on the class-path.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.memorynotfound.spring.boot</groupId>
<artifactId>custom-info-endpoint</artifactId>
<version>1.0.0-SNAPSHOT</version>
<url>https://memorynotfound.com</url>
<name>Spring Boot - ${project.artifactId}</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Bootstrap Spring Application
We use spring-boot
to bootstrap the application.
package com.memorynotfound.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Spring Boot Customize Actuator Info Endpoint Configuration
We can customize the spring actuator info endpoint using the following properties.
static properties
– we can add static information using key value pairs.maven build properties
– spring boot automatically exposes maven build properties. We can access them using the@property.name@
syntax.environment variables
– we can expose environment variables.loading properties from java class
– we can load dynamic properties from java classes by implementing theInfoContributor
interface.
## Spring Boot Actuator Info Endpoint Customization
info:
# static properties
app:
name: Spring Boot Actuator Info Endpoint Configuration Example
description: This tutorial demonstrates how to customize the Spring Boot Actuator Info Endpoint.
# build properties from maven
build:
groupId: @project.groupId@
artifact: @project.artifactId@
name: @project.name@
version: @project.version@
# environment variables
env:
java:
vendor: ${java.specification.vendor}
vm-name: ${java.vm.name}
runtime-version: ${java.runtime.version}
logging:
level:
- ".=info"
- "com.memorynotfound=debug"
- "org.springframework=info"
Loading Properties from Java Classes
We can dynamically inject properties from a class
by implementing the InfoContributor
interface. This allows us to inject static/dynamic properties or even do a database lookup. The possibilities are endless here.
package com.memorynotfound.cloud;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class MetaDataContributor implements InfoContributor {
@Autowired
private ApplicationContext ctx;
@Override
public void contribute(Info.Builder builder) {
Map<String, Object> details = new HashMap<>();
details.put("bean-definition-count", ctx.getBeanDefinitionCount());
details.put("startup-date", ctx.getStartupDate());
builder.withDetail("context", details);
}
}
Accessing Spring Boot Actuator Info Endpoint
When the application is started and we go to http://localhost:8080/info
we can access the actuator info endpoint. The following is the example output of the application configured earlier.
{
"app": {
"name": "Spring Boot Actuator Info Endpoint Configuration Example",
"description": "This tutorial demonstrates how to customize the Spring Boot Actuator Info Endpoint."
},
"build": {
"groupId": "com.memorynotfound.spring.boot",
"artifact": "custom-info-endpoint",
"name": "Spring Boot - custom-info-endpoint",
"version": "1.0.0-SNAPSHOT"
},
"env": {
"java": {
"vendor": "Oracle Corporation",
"vm-name": "Java HotSpot(TM) 64-Bit Server VM",
"runtime-version": "1.8.0_20-b26"
}
},
"context": {
"bean-definition-count": 187,
"startup-date": 1507802588645
}
}
Here is a screenshot of the actuator endpoint.
References
- Spring Boot Actuator Documentation
- Spring Boot Actuator Maven Build Properties Documentation
- Spring Boot Custom Info Documentation
- InfoContributor JavaDoc