Как я должен обрабатывать проверенные и непроверенные исключения в Java Config @Bean методе, чтобы отобразить удобную для пользователя причину ошибки?[дубликат]

StackOverflow https://stackoverflow.com//questions/25004905

Вопрос

Я разрабатываю небольшое приложение командной строки на основе spring-boot.В основном классе есть поле с аннотацией @Autowired @Autowired Repository repository; рецепт построения которого предоставлен в классе Java Config, который имеет соответствующий метод с аннотацией @Bean @Bean Repository repository(){...}.

Метод с аннотацией @Bean содержит код, который может генерировать проверенные и непроверенные исключения.@Bean Repository repository(){...//exceptions}

Моя цель - создать удобное для пользователя приложение, которое регистрирует короткие сообщения на соответствующем уровне протоколирования, а не длинные трассировки стека.

В настоящее время исключение в Java Config @Bean-annotated методе приводит к завершению работы приложения с o.s.boot.SpringApplication: Application startup failed сообщение и очень длинная трассировка стека.

Интересно, есть ли хороший способ обрабатывать хотя бы типичные исключения (о которых я знаю) в Java Config @Bean-аннотированный метод для регистрации удобных для пользователя кратких сообщений, полезных для устранения неполадок.

Я предполагаю, что такая стратегия предполагала бы добавление кода обработки исключений в класс Java Config, но я никогда не видел такого кода в общедоступных классах Java Config, что предполагает, что код обработки исключений в классах Java Config может быть плохой практикой.

Спасибо.

Это было полезно?

Решение

Я думаю, что здесь у вас есть несколько вариантов, и какой из них является лучшим, во многом зависит от личных предпочтений и структуры вашего приложения.

Одним из вариантов было бы выполнить всю проверку входных данных перед вызовом SpringApplication.run().Это сработало бы для любых аргументов командной строки, но в лучшем случае было бы громоздким для всего, что настроено через application.properties.

Вместо того, чтобы выбрасывать исключения из вашего @Bean методы, вы могли бы отлавливать их и обращаться с ними соответствующим образом.Если проблема незначительна, вы можете записать информацию или предупреждающее сообщение, объясняющее проблему, и разрешить приложению продолжить работу.Если проблема носит катастрофический характер, вы можете записать в журнал сообщение об ошибке, а затем вызвать System.exit().Хотя это обеспечит удобное для пользователя сообщение об ошибках для любых исключений, возникших во время вашего @Bean методы вызываются, у вас все равно останутся трассировки стека для любых исключений, которые возникнут после этого.

Наконец, вы могли бы обернуть вызов следующим образом SpringApplication.run() в блоке try-catch.Затем вы могли бы изучить перехваченное исключение и цепочку причин, чтобы определить подходящее сообщение об ошибке для регистрации.Преимущество этого подхода заключается в том, что он позволит вам предоставить удобное для пользователя сообщение об ошибке для любого исключения, которое вызывает SpringApplication.run() потерпеть неудачу, а не просто ту, которая исходит из одного из ваших @Bean методы.

Предполагая, что для проверки есть аргументы командной строки, я бы, вероятно, использовал комбинацию первого и третьего вариантов.Для начала я бы использовал библиотеку CLI, такую как JOpt Simple, чтобы немного упростить задачу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top