Spring Boot actuator endpoints
last modified July 31, 2023
In this article we show how to enable actuator endpoints in a Spring Boot application.
Spring Boot is a popular application framework for creating enterprise application in Java, Kotlin, or Groovy.
Actuator endpoints are used to provide information and monitor our applications.
They are enabled with the spring-boot-actuator
module.
The following is a partial is of built-in actuator endpoints.
- beans - displays a complete list of all Spring beans
- caches - exposes available caches
- env - exposes properties from Spring's ConfigurableEnvironment
- health - shows application health information
- metrics - shows metrics information for the current application
- shutdown - lets the application be gracefully shutdown
- threaddump - performs a thread dump.
The actuator
endpoint returns a list of available endpoints.
Endpoints are available for HTTP and JMX.
By default, only the health
endpoint is enabled. We can enable
endpoints via the management.endpoints.web.exposure.include
property
management.endpoints.web.exposure.include=*
Here we enable most endpoints with the star operator.
management.endpoints.web.exposure.include=health,info,beans,env
We can enable only specific endpoints.
management.endpoint.shutdown.enabled=true
Some endpoints, such as shutdown
, must be enabled explicitly due
to their sensitivity.
Spring Boot actuator example
The following application enables actuator endpoints.
build.gradle ... src ├───main │ ├───java │ │ └───com │ │ └───zetcode │ │ │ Application.java │ │ ├───actuator │ │ │ MyEndpoint.java │ │ └───controller │ │ HelloController.java │ └───resources │ application.properties └───test ├───java └───resources
This is the project structure.
plugins { id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'com.zetcode' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-actuator' }
This is the Gradle build file. We include the
spring-boot-starter-actuator
module.
spring.main.banner-mode=off management.endpoints.web.exposure.include=health,beans,env,now
In the Application properties file, we enable the health, beans, env, and
now endpoints. The now
endpoint is a custom one.
package com.zetcode.controller; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping(path = "/hello") public ResponseEntity<String> hello() { return ResponseEntity.ok("hello there!"); } }
The application has a simple controller with one mapping.
package com.zetcode.actuator; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Endpoint(id="now") @Component public class MyEndpoint { @ReadOperation @Bean public LocalDateTime now() { return LocalDateTime.now(); } }
We create a custom actuator with @Endpoint
. It returns the
current datetime.
package com.zetcode; 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); } }
The Application
sets up the Spring Boot application.
$ ./gradlew bootRun
We build the application and run it.
$ curl localhost:8080/actuator/health {"status":"UP"} $ curl localhost:8080/actuator/now "2023-07-31T16:38:54.3963529"
We check two endpoints.
In this tutorial we have worked with actuator endpoints.