How to Create Custom Endpoints in Spring Boot Actuators

Nikhil Soman Sahu
3 min readJul 12, 2024

--

Photo by Desola Lanre-Ologun on Unsplash

Hello everyone! Welcome to another blog post where we’ll dive into the world of Spring Boot Actuator. Today, I’m excited to show you how to create custom endpoints in Spring Boot Actuator, allowing you to expose additional information specific to your application. Whether you’re a seasoned developer or just getting started with Spring Boot, this guide will walk you through the process step-by-step. Let’s get started!

Prerequisites

Before we jump into creating custom endpoints, make sure you have the following setup:

  • Java Development Kit (JDK) installed
  • Maven or Gradle for dependency management
  • A basic understanding of Spring Boot
  • An IDE such as IntelliJ IDEA or Eclipse

Step 1: Set Up Your Spring Boot Application

First, you need to create a Spring Boot application. If you already have one, you can skip this step.

  1. Create a new Spring Boot project:

. You can create a Spring Boot project using Spring Initializr.

  • Select “Maven Project” or “Gradle Project”.
  • Choose your preferred language (Java).
  • Add “Spring Boot Actuator” dependency.
  • Generate the project and extract the downloaded zip file.

2. Import the project into your IDE:

Open your IDE and import the project as a Maven or Gradle project.

Step 2: Add Actuator Dependency

Ensure your pom.xml (for Maven) or build.gradle (for Gradle) includes the Spring Boot Actuator dependency. If you used Spring Initializr, this should already be included. If not, add the following dependency:

Maven

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Gradle

implementation 'org.springframework.boot:spring-boot-starter-actuator'

Step 3: Enable Actuator Endpoints

By default, some Actuator endpoints are disabled. To enable all endpoints, add the following configuration to your application.properties or application.yml file:

application.properties

management.endpoints.web.exposure.include=*

application.yml

management:
endpoints:
web:
exposure:
include: "*"

Step 4: Create a Custom Endpoint

To create a custom endpoint, you need to implement the Endpoint interface provided by Spring Boot. Here's a step-by-step guide to creating a custom endpoint:

  1. Create a new class for your custom endpoint:
package com.example.demo.endpoint;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;

@Component
@Endpoint(id = "custom")
public class CustomEndpoint {

@ReadOperation
public String customEndpoint() {
return "This is a custom endpoint!";
}
}
  • The @Endpoint annotation marks this class as a custom endpoint with an ID of "custom".
  • The @ReadOperation annotation indicates that this method will handle HTTP GET requests to the custom endpoint.
  1. Access your custom endpoint:

After starting your Spring Boot application, you can access your custom endpoint at http://localhost:8080/actuator/custom.

Step 5: Add More Operations

You can add more operations to your custom endpoint, such as write operations (POST, PUT, DELETE) and delete operations.

  1. Adding a write operation:
package com.example.demo.endpoint;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
import org.springframework.stereotype.Component;

@Component
@Endpoint(id = "custom")
public class CustomEndpoint {

@ReadOperation
public String customEndpoint() {
return "This is a custom endpoint!";
}

@WriteOperation
public String updateCustomEndpoint(String newValue) {
// Handle the update logic here
return "Custom endpoint updated with value: " + newValue;
}
}
  • The @WriteOperation annotation indicates that this method will handle HTTP POST requests to the custom endpoint.
  • You can handle the update logic inside the method and return a response.

Access your write operation:

You can access your write operation at http://localhost:8080/actuator/custom with an HTTP POST request, passing the new value as a parameter.

Step 6: Customize Endpoint Security

By default, all actuator endpoints are secured. You can customize the security settings for your custom endpoint.

  1. Add security configuration:
package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/actuator/custom").permitAll() // Customize access here
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
  • This configuration permits all requests to the custom endpoint. You can customize the access as per your requirements.

Conclusion

Creating custom endpoints in Spring Boot Actuator is straightforward and provides a flexible way to expose additional application-specific information. By following the steps outlined in this blog post, you can easily create and manage your custom endpoints, adding more operations and securing them as needed.

With custom endpoints, you can enhance the observability and manageability of your Spring Boot applications, making it easier to monitor and control various aspects of your application.

--

--

Nikhil Soman Sahu
Nikhil Soman Sahu

Written by Nikhil Soman Sahu

Sr Software Developer | Spring Boot | Flutter | Dart | Java

No responses yet