Creating a custom endpoint
We have seen that the Actuator provides several endpoints for your application. But Spring Boot's Actuator also allows you to create a custom endpoint by implementing the EndPoint interface. Let's see the following example:
package com.dineshonjava.sba; import java.util.ArrayList; import java.util.List; import org.springframework.boot.actuate.endpoint.Endpoint; import org.springframework.stereotype.Component; @Component public class MyCustomEndpoint implements Endpoint<List<String>>{ @Override public String getId() { return "myCustomEndpoint"; } @Override public List<String> invoke() { // Custom logic to build the output List<String> list = new ArrayList<>(); list.add("App message 1"); list.add("App message 2"); list.add("App message 3"); list.add("App message 4"); return list; } @Override public boolean isEnabled() { return true; } @Override public boolean isSensitive() { return true; } }
As you can see, the MyCustomEndpoint class implemented the EndPoint interface and it overrode four methods, getId(), invoke(), isSensitive(), and isEnabled(). The getId() method returns endpoint ID or name, and by using it you can access /myCustomEndpoint for now. Let's see what the following response returns:
[ "App message 1", "App message 2", "App message 3", "App message 4" ]
The invoke() method returns an application message—whatever you want to expose from this custom endpoint. The isEnabled() and isSensitive() methods are used for enabling this endpoint for your application and setting the sensitivity of this endpoint respectively.
There are many more ways of customizing Spring Boot's Actuator. Spring Boot allows us to customize all of the Actuator. That is why Spring Boot is opinionated.
Many of the Actuator endpoints expose sensitive data, so you have to protect these endpoints from any unwanted activity. Spring Boot allows you to secure these Actuator endpoints. In the next section, let's see how to make these Actuator endpoints secure.