spring boot 全局异常处理通过实现 handlerexceptionresolver 接口或添加 @controlleradvice 注解的类来捕获探针失败异常。具体做法是定义一个全局异常处理器,在方法上使用 @exceptionhandler 指定要捕获的探针异常类型,并返回统一的错误响应对象。这样当探针执行失败抛出异常时,框架会自动拦截并交由该处理器处理。

如何配置全局异常处理器以捕获特定探针异常
需要创建一个继承自 ResponseEntityExceptionHandler 或实现 HandlerExceptionResolver 的组件类,并使用 @RestControllerAdvice 注解使其生效。在该类中定义处理方法,使用 @ExceptionHandler(ProbeFailureException.class) 来专门处理探针失败异常。这样做可以确保所有控制器抛出的探针异常都被统一捕获,避免业务代码中充斥大量的 try-catch 块。

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.http.ResponseEntity;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ProbeFailureException.class)
public ResponseEntity<ErrorResponse> handleProbeFailure(ProbeFailureException ex) {
ErrorResponse error = new ErrorResponse("PROBE_FAILED", ex.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
上述代码定义了一个全局异常处理器,当 ProbeFailureException 被抛出时,会返回状态码为 500 的 JSON 响应。开发者只需确保探针相关代码抛出此异常即可。
探针失败后如何记录日志并通知监控平台
在全局异常处理器中,除了返回错误响应外,还可以集成日志记录和监控通知逻辑。通过在 @ExceptionHandler 方法中调用日志服务(如 SLF4J)和监控客户端(如 Prometheus 或自定义 HTTP 客户端),可以在捕获异常的同时完成副作用操作。这有助于快速定位探针失败的原因并及时告警。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.http.ResponseEntity;
@RestControllerAdvice
public class GlobalExceptionHandler {
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(ProbeFailureException.class)
public ResponseEntity<ErrorResponse> handleProbeFailure(ProbeFailureException ex) {
log.error("Probe failed: {}", ex.getMessage(), ex);
// 可选:发送监控通知
// monitorClient.notify(ex.getProbeId(), ex.getMessage());
ErrorResponse error = new ErrorResponse("PROBE_FAILED", ex.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
这段代码在捕获异常后记录了详细日志,包括异常堆栈信息。开发者可根据实际需求取消注释监控通知部分,将异常信息发送至外部监控系统。这种处理方式既保证了 API 响应的规范性,又增强了系统的可观测性。
探针失败异常中包含哪些关键信息可用于排查
探针失败异常通常包含探针 ID、失败原因、时间戳以及可能的原始错误信息。这些信息对于排查问题至关重要。例如,ProbeFailureException 可能包含 probeId 字段用于标识失败的探针实例,reason 字段说明失败的具体原因(如超时、连接拒绝等)。通过分析这些字段,可以快速缩小问题范围,定位是网络问题、配置错误还是探针自身故障。


















