Spring Boot非控制器异常处理-集中式异常处理

时间:2018-12-13 02:39:16

标签: java spring spring-boot

有没有一种方法可以在Spring Boot中创建集中式异常处理机制。我有一个自定义异常,该异常是我从多个@Component类中抛出的,我希望将其捕获在一个类/处理程序中。

这是不是 REST API或Controller触发的调用。我尝试将@ControllerAdvice@ExceptionHandler一起使用。但没有运气。以下示例显示了我正在尝试实现的目标。方法句柄未触发。我正在使用Spring Boot v2.1.1

CustomException

public class CustomException extends RuntimeException {
    public CustomException(String errorMessage, Throwable err) {
       super(errorMessage, err);
    }
}

处理程序

@ControllerAdvice
public class CatchCustomException {       
   @ExceptionHandler(value = CustomException.class )
   public void handle (CustomException e)
   {
     System.out.println(e.getMessage());
   }
}

组件类

@Component
@EnableScheduling
public class HandlingExample {

    @Scheduled(fixedRate = 3000)
    public void method1(){
        throw new CustomException("Method1++++", new Exception());
    }

    @Scheduled(fixedRate = 1000)
    public void method2(){
        throw new CustomException("Method2----", new Exception());
    }
}

1 个答案:

答案 0 :(得分:0)

spring在不同的上下文中有许多错误处理程序,对于您的情况,您应该使用 @Schedule 处理错误异常,因此您可以自己创建 TaskScheduler < / p>

    @Bean
    public TaskScheduler taskScheduler() {
        ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor();
        ConcurrentTaskScheduler taskScheduler = new ConcurrentTaskScheduler(localExecutor);
        taskScheduler.setErrorHandler(new YourErrorHandler());
        return taskScheduler;
    }


    public class YourErrorHandler implements ErrorHandler {

        @Override
        public void handleError(Throwable t) {
            // TODO Auto-generated method stub

        }

    }