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]

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

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top