Como devo lidar com exceções verificadas e não verificadas no método Java Config @Bean para exibir uma causa amigável do erro?[duplicado]
-
20-12-2019 - |
Pergunta
Estou desenvolvendo um pequeno aplicativo de linha de comando baseado em Spring Boot.A classe principal possui um campo anotado com @Autowired @Autowired Repository repository;
cuja receita de construção é fornecida na classe Java Config que possui um método anotado em @Bean apropriado @Bean Repository repository(){...}
.
O método anotado @Bean contém código que pode lançar exceções verificadas e não verificadas.@Bean Repository repository(){...//exceptions}
Meu objetivo é criar um aplicativo amigável que registre mensagens breves no nível de registro apropriado, em vez de longos rastreamentos de pilha.
Atualmente, uma exceção no método Java Config @Bean anotado faz com que o aplicativo saia com o.s.boot.SpringApplication: Application startup failed
mensagem e um rastreamento de pilha muito longo.
Gostaria de saber se existe uma boa maneira de lidar pelo menos com exceções típicas (das quais estou ciente) no método Java Config @Bean anotado para registrar mensagens breves e amigáveis, úteis para solução de problemas.
Presumo que tal estratégia esperaria adicionar código de tratamento de exceções à classe Java Config, mas nunca vi esse código em classes Java Config disponíveis publicamente, o que sugere que o código de tratamento de exceções nas classes Java Config pode ser uma prática ruim.
Obrigado.
Solução
Acho que você tem algumas opções aqui, e qual é a melhor depende em grande parte da preferência pessoal e da estrutura do seu aplicativo.
Uma opção seria realizar toda a validação de entrada antes de ligar SpringApplication.run()
.Isso funcionaria para qualquer argumento de linha de comando, mas seria, na melhor das hipóteses, complicado para qualquer coisa configurada via application.properties
.
Em vez de lançar exceções do seu @Bean
métodos, você pode capturá-los e tratá-los adequadamente.Se o problema for menor, você poderá registrar uma mensagem informativa ou de aviso explicando o problema e permitir que o aplicativo continue.Se o problema for catastrófico, você poderá registrar uma mensagem de erro e ligar System.exit()
.Embora isso forneça relatórios de erros fáceis de usar para quaisquer exceções lançadas enquanto seu @Bean
métodos estão sendo chamados, você ainda terá rastreamentos de pilha para quaisquer exceções que ocorrerem depois disso.
Por último, você pode encerrar a chamada para SpringApplication.run()
em um bloco try-catch.Você poderia então examinar a exceção detectada e a cadeia de causas para determinar uma mensagem de erro apropriada para registrar.A vantagem dessa abordagem é que ela permitirá fornecer uma mensagem de erro amigável para qualquer exceção que cause SpringApplication.run()
falhar, não apenas aquele que é jogado de dentro de um de seus @Bean
métodos.
Supondo que existam argumentos de linha de comando para validar, provavelmente usaria uma combinação da primeira e da terceira opções.Pela primeira vez, eu usaria uma biblioteca CLI como JOpt Simple para tornar as coisas um pouco mais fáceis.