Рубрики
Без рубрики

Создайте пользовательский анализатор сбоев с помощью Spring Boot

Краткое практическое руководство по использованию пользовательского анализатора сбоев в Spring Boot для предоставления более полезного сообщения об ошибке при сбое запуска приложения.

Автор оригинала: baeldung.

1. Обзор

Анализатор сбоев в Spring Boot предлагает способ перехвата исключений, возникающих во время запуска приложения , вызывающих сбой запуска приложения.

Анализатор Failure Analyzer заменяет трассировку стека исключения более читаемым сообщением, представленным объектом FailureAnalysis , который содержит описание ошибки и предлагаемый курс действий.

Boot содержит ряд анализаторов для распространенных исключений запуска, таких как PortInUseException , NoUniqueBeanDefinitionException и UnsatisfiedDependencyException . Их можно найти в пакете org.springframework.boot.diagnostics .

В этом кратком руководстве мы рассмотрим , как мы можем добавить свой собственный Анализатор сбоев к существующим.

2. Создание пользовательского анализатора сбоев

Чтобы создать пользовательский FailureAnalyzer , мы просто расширим абстрактный класс AbstractFailureAnalyzer – который перехватывает указанный тип исключения и реализует analyze() API.

Фреймворк предоставляет реализацию Bean Not Of Required Type Failure Analyzer , которая имеет дело с исключением BeanNotOfRequiredTypeException только в том случае, если вводимый компонент относится к динамическому прокси-классу.

Давайте создадим пользовательский Анализатор сбоев , который обрабатывает все исключения типа BeanNotOfRequiredTypeException. Наш класс перехватывает исключение и создает Анализ сбоев объект с полезным описанием и сообщениями о действиях:

public class MyBeanNotOfRequiredTypeFailureAnalyzer 
  extends AbstractFailureAnalyzer {

    @Override
    protected FailureAnalysis analyze(Throwable rootFailure, 
      BeanNotOfRequiredTypeException cause) {
        return new FailureAnalysis(getDescription(cause), getAction(cause), cause);
    }

    private String getDescription(BeanNotOfRequiredTypeException ex) {
        return String.format("The bean %s could not be injected as %s "
          + "because it is of type %s",
          ex.getBeanName(),
          ex.getRequiredType().getName(),
          ex.getActualType().getName());
    }

    private String getAction(BeanNotOfRequiredTypeException ex) {
        return String.format("Consider creating a bean with name %s of type %s",
          ex.getBeanName(),
          ex.getRequiredType().getName());
    }
}

3. Регистрация пользовательского анализатора сбоев

Чтобы пользовательский FailureAnalyzer рассматривался Spring Boot, необходимо зарегистрировать его в стандартном resources/META-INF/spring.factories файле, содержащем org.springframework.boot.diagnostics.FailureAnalyzer ключ со значением полного имени нашего класса:

org.springframework.boot.diagnostics.FailureAnalyzer=\
  com.baeldung.failureanalyzer.MyBeanNotOfRequiredTypeFailureAnalyzer

4. Пользовательский анализатор сбоев в действии

Давайте создадим очень простой пример, в котором мы попытаемся ввести компонент неправильного типа, чтобы увидеть, как ведет себя наш пользовательский FailureAnalyzer .

Давайте создадим два класса My DAO и My Second DAY и аннотируем второй класс как боб под названием MyDao :

public class MyDAO { }
@Repository("myDAO")
public class MySecondDAO { }

Затем в классе MyService мы попытаемся ввести компонент MyDao , который имеет тип Мой второй ДЕНЬ , в переменную типа MyDao :

@Service
public class MyService {

    @Resource(name = "myDAO")
    private MyDAO myDAO;
}

После запуска приложения Spring Boot запуск завершится ошибкой со следующим выводом консоли:

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean myDAO could not be injected as com.baeldung.failureanalyzer.MyDAO 
  because it is of type com.baeldung.failureanalyzer.MySecondDAO$$EnhancerBySpringCGLIB$$d902559e

Action:

Consider creating a bean with name myDAO of type com.baeldung.failureanalyzer.MyDAO

5. Заключение

В этом кратком руководстве мы сосредоточились на том, как реализовать пользовательский анализатор сбоев Spring Boot .

Как всегда, полный исходный код примера можно найти на GitHub .