如何捕获 Spring Boot 中的所有异常?

问题描述 投票:0回答:1

我想确保我的团队始终记录抛出的异常。有没有办法捕获 Spring Boot 应用程序中的所有异常(无论入口点)?

使用@ControllerAdvice

(和
@RestControllerAdvice
)的答案
是这个问题的错误答案,因为它只捕获由
@Controller
组件启动的代码的异常。代码可以通过多种不同的方式启动,例如
@JmsListener
带注释的方法在从队列接收消息时运行。由 JmsListener 启动的代码中引发的异常不会被 ControllerAdvice 中的处理程序捕获。

spring-boot exception spring-jms
1个回答
0
投票

使用@ControllerAdvice(和@RestControllerAdvice)的这个答案是这个问题的错误答案,因为它只捕获由@Controller组件启动的代码的异常。代码可以通过多种不同的方式启动,例如 @JmsListener 注解的方法在从队列接收消息时运行。由 JmsListener 启动的代码中引发的异常不会被 ControllerAdvice 中的处理程序捕获。

要捕获 Spring Boot 应用程序中的所有异常,无论入口点如何,您都可以创建一个实现

class GlobalExceptionHandler
HandlerExceptionResolver interface

您可以在此类的

resolveException()
方法中记录异常或执行任何其他必要的操作来处理异常。

您还需要通过将以下 bean 添加到 Spring Boot 配置文件来将

class GlobalExceptionHandler
添加到应用程序上下文。

@Bean
public HandlerExceptionResolver globalExceptionHandler() {
    return new GlobalExceptionHandler();
}

现在 Spring Boot 应用程序中所有未捕获的异常都将由

resolveException()
中的
class GlobalExceptionHandler
方法处理。

附注

class GlobalExceptionHandler
@ControllerAdvice
更通用。它可用于处理任何类型代码的异常,而
@ControllerAdvice
仅用于处理由
@Controller
组件启动的代码的异常。

© www.soinside.com 2019 - 2024. All rights reserved.