Spring Boot 健康检查失败:AOP 全面拦截与日志记录
为避免 Kubernetes 因健康检查失败而重启服务,建议拦截所有 HealthIndicator 调用并记录失败组件。直接使用 @Pointcut 拦截 health() 方法可能遗漏继承自 AbstractHealthIndicator 并实现 doHealthCheck() 方法的子类。
更有效的解决方案是使用如下增强点表达式:
@Pointcut(value = "execution(* org.springframework.boot.actuate.health..HealthIndicator+.*(..))") public void healthPointCut() {}
该表达式匹配所有 HealthIndicator 类及其子类的所有方法调用,包括 health() 方法和其他公有方法,确保所有 HealthIndicator 的调用都被拦截并记录其失败情况。