Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Provides patterns to configure Spring Boot Actuator for production-grade monitoring, health probes, secured management endpoints, and Micrometer metrics across JVM services. Use when setting up monitoring, health checks, or metrics for Spring Boot applications.
.claude/skills/giuseppe-trisciuoglio-spring-boot-actuator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 518% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 267% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 510% | 0% |
references/.xml<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
gradle// Gradle dependencies { implementation "org.springframework.boot:spring-boot-starter-actuator" }
After adding the dependency, verify endpoints respond:
bashcurl http://localhost:8080/actuator/health curl http://localhost:8080/actuator/info
Include spring-boot-starter-actuator in your build configuration. > Validate: Restart the service and confirm /actuator/health and /actuator/info respond with 200 OK.
management.endpoints.web.exposure.include to the precise list or "*" for internal deployments.management.endpoints.web.base-path (e.g., /management) when the default /actuator conflicts with routing.references/endpoint-reference.md.> Validate: curl http://localhost:8080/actuator returns the list of exposed endpoints.
SecurityFilterChain using EndpointRequest.toAnyEndpoint() with role-based rules.management.server.port with firewall controls or service mesh policies for operator-only access./actuator/health/** publicly accessible only when required; otherwise enforce authentication.> Validate: Unauthenticated requests to protected endpoints return 401 Unauthorized.
management.endpoint.health.probes.enabled=true for /health/liveness and /health/readiness.management.endpoint.health.group.* to match platform expectations.HealthIndicator or ReactiveHealthContributor; sample implementations in references/examples.md#custom-health-indicator.> Validate: /actuator/health/readiness returns UP with all mandatory components before promoting to production.
management.metrics.export.*.MeterRegistryCustomizer beans to add application, environment, and business tags for observability correlation.server.observation.* configuration when using Spring Boot 3.2+.> Validate: Scrape /actuator/prometheus and confirm required meters (http.server.requests, jvm.memory.used) are present.
/actuator/startup (Spring Boot 3.5+) and /actuator/conditions during incident response to inspect auto-configuration decisions.HttpExchangeRepository (e.g., InMemoryHttpExchangeRepository) before enabling /actuator/httpexchanges for request auditing.references/endpoint-reference.md for endpoint behaviors and limits.> Validate: /actuator/startup and /actuator/conditions return valid JSON payloads.
yamlmanagement: endpoints: web: exposure: include: "health,info" endpoint: health: show-details: never
java@Component public class PaymentsGatewayHealth implements HealthIndicator { private final PaymentsClient client; public PaymentsGatewayHealth(PaymentsClient client) { this.client = client; } @Override public Health health() { boolean reachable = client.ping(); return reachable ? Health.up().withDetail("latencyMs", client.latency()).build() : Health.down().withDetail("error", "Gateway timeout").build(); } }
yamlmanagement: endpoint: health: probes: enabled: true group: readiness: include: "readinessState,db,paymentsGateway" show-details: always
yamlmanagement: server: port: 9091 ssl: enabled: true endpoints: web: exposure: include: "health,info,metrics,prometheus" base-path: "/management" metrics: export: prometheus: descriptions: true step: 30s endpoint: health: show-details: when-authorized roles: "ENDPOINT_ADMIN"
java@Configuration public class ActuatorSecurityConfig { @Bean SecurityFilterChain actuatorChain(HttpSecurity http) throws Exception { http.securityMatcher(EndpointRequest.toAnyEndpoint()) .authorizeHttpRequests(c -> c .requestMatchers(EndpointRequest.to("health")).permitAll() .anyRequest().hasRole("ENDPOINT_ADMIN")) .httpBasic(Customizer.withDefaults()); return http.build(); } }
More end-to-end samples are available in references/examples.md.
references/ for verbose documentation to conserve context.curl probes in CI/CD pipelines./actuator/env, /actuator/configprops, /actuator/logfile, and /actuator/heapdump on public networks./actuator/beans and /actuator/mappings as they reveal internal application structure.scripts/) reserved for future automation; no runtime dependencies today.mvn spring-boot:run or ./gradlew bootRun exposes expected endpoints under /actuator (or custom base path)./actuator/health/readiness returns UP with all mandatory components before promoting to production./actuator/metrics or /actuator/prometheus to ensure required meters (http.server.requests, jvm.memory.used) are present.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 2,363 | 2,704 | +14% | 1 | 1 | 0% | 389 | 2,405 | +518% | 0 | 0 | — |
case-02 | pass→pass | 3,729 | 2,781 | -25% | 1 | 1 | 0% | 668 | 2,453 | +267% | 0 | 0 | — |
case-03 | pass→pass | 2,606 | 1,974 | -24% | 1 | 1 | 0% | 380 | 2,319 | +510% | 0 | 0 | — |
case-04 | pass→pass | 7,286 | 4,953 | -32% | 1 | 1 | 0% | 1,298 | 3,008 | +132% | 0 | 0 | — |
case-05 | pass→pass | 3,187 | 8,078 | +153% | 1 | 1 | 0% | 466 | 2,595 | +457% | 0 | 0 | — |
case-06 | pass→pass | 6,371 | 2,895 | -55% | 1 | 1 | 0% | 1,114 | 2,481 | +123% | 0 | 0 | — |
case-07 | pass→pass | 5,735 | 5,131 | -11% | 1 | 1 | 0% | 1,086 | 2,988 | +175% | 0 | 0 | — |
case-08 | pass→pass | 4,297 | 3,509 | -18% | 1 | 1 | 0% | 783 | 2,610 | +233% | 0 | 0 | — |
case-09 | pass→pass | 3,514 | 3,332 | -5% | 1 | 1 | 0% | 605 | 2,546 | +321% | 0 | 0 | — |
case-10 | pass→pass | 2,904 | 2,245 | -23% | 1 | 1 | 0% | 442 | 2,380 | +438% | 0 | 0 | — |
case-11 | pass→pass | 3,507 | 3,434 | -2% | 1 | 1 | 0% | 628 | 2,502 | +298% | 0 | 0 | — |
case-12 | pass→pass | 4,354 | 3,293 | -24% | 1 | 1 | 0% | 742 | 2,505 | +238% | 0 | 0 | — |
case-13 | fail→pass | 13,219 | 3,425 | -74% | 1 | 1 | 0% | 2,193 | 2,442 | +11% | 0 | 0 | — |
case-14 | pass→pass | 3,899 | 3,318 | -15% | 1 | 1 | 0% | 639 | 2,537 | +297% | 0 | 0 | — |
case-15 | pass→pass | 6,377 | 3,648 | -43% | 1 | 1 | 0% | 974 | 2,574 | +164% | 0 | 0 | — |
case-16 | fail→pass | 12,061 | 3,250 | -73% | 1 | 1 | 0% | 2,184 | 2,484 | +14% | 0 | 0 | — |
case-17 | pass→pass | 7,473 | 4,975 | -33% | 1 | 1 | 0% | 1,209 | 2,827 | +134% | 0 | 0 | — |
case-18 | pass→pass | 4,467 | 4,059 | -9% | 1 | 1 | 0% | 774 | 2,685 | +247% | 0 | 0 | — |
case-19 | pass→pass | 5,352 | 4,511 | -16% | 1 | 1 | 0% | 871 | 2,804 | +222% | 0 | 0 | — |
case-20 | pass→pass | 2,124 | 2,233 | +5% | 1 | 1 | 0% | 301 | 2,284 | +659% | 0 | 0 | — |
case-21 | pass→pass | 5,876 | 4,599 | -22% | 1 | 1 | 0% | 1,022 | 2,798 | +174% | 0 | 0 | — |
case-22 | pass→pass | 12,091 | 11,102 | -8% | 1 | 1 | 0% | 2,356 | 4,143 | +76% | 0 | 0 | — |
case-23 | pass→pass | 3,634 | 3,513 | -3% | 1 | 1 | 0% | 616 | 2,634 | +328% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.