Actuator lấy trạng thái từ interface ApplicationAvailability và expose thành hai health group riêng:
- /actuator/health/liveness — LivenessState. Trả DOWN nghĩa là tiến trình hỏng không tự phục hồi, Kubernetes phải restart pod.
- /actuator/health/readiness — ReadinessState. Trả DOWN nghĩa là app tạm thời chưa nhận traffic (đang warm-up, dependency chập chờn), Kubernetes chỉ rút pod khỏi Service endpoints, không restart.
Hai group tự bật khi app chạy trong môi trường Kubernetes; ngoài môi trường đó thì bật tay:
management.endpoint.health.probes.enabled=true
management.endpoints.web.exposure.include=healthSai lầm hay gặp: đưa health check của database vào liveness. Database chập chờn sẽ khiến toàn bộ pod bị restart hàng loạt trong khi bản thân app vẫn ổn — càng restart càng kéo dài sự cố. Dependency ngoài chỉ nên nằm ở readiness, còn liveness giữ tối thiểu.
Code nghiệp vụ có thể chủ động đổi trạng thái qua AvailabilityChangeEvent.publish(context, ReadinessState.REFUSING_TRAFFIC) khi cần rút mình khỏi load balancer.