Spring Boot - Actuator
Spring Boot Actuator adds production-ready operational endpoints to your application with zero code. You get HTTP endpoints for health checks, metrics, environment info, thread dumps, and more: invaluable when running in cloud or container environments.
Contents
Adding Actuator
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Key built-in endpoints
: overall health status and component details./actuator/health : arbitrary application metadata (version, git commit, etc.)./actuator/info : JVM, HTTP, and custom metrics./actuator/metrics : all environment properties and their source./actuator/env : view and change logger levels at runtime./actuator/loggers : current thread state for diagnosing deadlocks./actuator/threaddump : lists all/actuator/mappings routes.@RequestMapping
Exposing endpoints
By default only /healthapplication.properties
Properties
# Expose selected endpoints
management.endpoints.web.exposure.include=health,info,metrics,loggers,env
# Show full health detail
management.endpoint.health.show-details=always
# Isolate actuator to an internal port
management.server.port=9090
# Populate /actuator/info
info.app.name=My Spring App
info.app.version=1.0.0
Custom health indicator
Implement HealthIndicator
Java
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component("externalApi")
public class ExternalApiHealthIndicator implements HealthIndicator {
private final ExternalApiClient apiClient;
public ExternalApiHealthIndicator(ExternalApiClient apiClient) {
this.apiClient = apiClient;
}
@Override
public Health health() {
try {
boolean ok = apiClient.ping();
return ok
? Health.up().withDetail("url", apiClient.getBaseUrl()).build()
: Health.down().withDetail("reason", "Ping failed").build();
} catch (Exception e) {
return Health.down(e).build();
}
}
}
This appears under /actuator/healthexternalApi
Securing Actuator endpoints
In production, restrict sensitive endpoints. Combine management.server.port
Java
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class ActuatorSecurityConfig {
@Bean
public SecurityFilterChain actuatorSecurity(HttpSecurity http) throws Exception {
http
.securityMatcher(EndpointRequest.toAnyEndpoint())
.authorizeHttpRequests(auth -> auth
.requestMatchers(EndpointRequest.to("health", "info")).permitAll()
.anyRequest().hasRole("ADMIN")
)
.httpBasic(h -> {});
return http.build();
}
}