Можно ли определить FailureAnalyzer в пользовательском Spring Boot Starter? - PullRequest
0 голосов
/ 03 марта 2020

Я создал Custom Spring Boot Starter, и мне было интересно, можно ли определить значимое сообщение об ошибке при запуске приложения, чтобы дать пользователям подсказки о том, как правильно настроить интеграцию с Custom Starter.

В частности, я пытаюсь проинформировать пользователя о недостающей реализации bean-компонента, которая, как ожидается, будет присутствовать, и дать некоторый контекст о том, почему это необходимо предоставить. Хотя обработка FailureAnalyzer по умолчанию NoSuchBeanDefinitionException уже дает некоторые полезные результаты, я бы хотел немного подробнее указать c.

Именно поэтому я реализовал свою собственную FailureAnalyzer:

package com.domain;
public class MyCustomFailureAnalyzer extends AbstractFailureAnalyzer<NoSuchBeanDefinitionException> {
@Override
    protected FailureAnalysis analyze(Throwable rootFailure, NoSuchBeanDefinitionException cause) {
        if(isEventHandlerBeanNotFound(cause)) {
            return new FailureAnalysis("custom description", "custom action", cause);
        } else {
            // delegate the analysis to the regular FailureAnalyzer
            return null;
        }
    }

    private boolean isEventHandlerBeanNotFound(NoSuchBeanDefinitionException cause) {
        return cause.getBeanType() != null && cause.getBeanType().equals(EventHandler.class);
    }
}

Я зарегистрировал его через файл src/main/resources/META-INF/spring.factories следующим образом:

org.springframework.boot.diagnostics.FailureAnalyzer=\
com.domain.MyCustomFailureAnalyzer

Требуемый анализ отказов срабатывает очень хорошо, если FailureAnalyzer определен в src/main/resources/META-INF/spring.factories приложение весенней загрузки. Когда я определяю его в своих пользовательских модулях стартера src/main/resources/META-INF/spring.factories и добавляю собственный стартер в качестве зависимости к приложению Spring, он не работает.

Возможно ли то, чего я пытаюсь достичь, здесь вообще возможно или есть какой-то другой механизм, которым я могу воспользоваться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...