¿Cómo debo manejar las excepciones marcadas y no marcadas en el método Java Config @Bean para mostrar una causa del error fácil de usar?[duplicar]

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

Pregunta

Estoy desarrollando una pequeña aplicación de línea de comandos basada en Spring Boot.La clase principal tiene un campo anotado @Autowired @Autowired Repository repository; cuya receta de construcción se proporciona en la clase Java Config que tiene un método apropiado anotado con @Bean @Bean Repository repository(){...}.

El método anotado por @Bean contiene código que puede generar excepciones marcadas y no marcadas.@Bean Repository repository(){...//exceptions}

Mi objetivo es crear una aplicación fácil de usar que registre mensajes breves en el nivel de registro apropiado en lugar de seguimientos de pila largos.

Actualmente, una excepción en el método anotado @Bean de Java Config hace que la aplicación cierre con o.s.boot.SpringApplication: Application startup failed mensaje y un seguimiento de pila muy largo.

Me pregunto si hay una buena manera de manejar al menos las excepciones típicas (que conozco) en el método anotado en Java Config @Bean para registrar mensajes breves fáciles de usar y útiles para la resolución de problemas.

Supongo que tal estrategia requeriría agregar código de manejo de excepciones a la clase Java Config, pero nunca he visto ese código en clases de Java Config disponibles públicamente, lo que sugiere que el código de manejo de excepciones en las clases Java Config podría ser una mala práctica.

Gracias.

¿Fue útil?

Solución

Creo que tiene algunas opciones aquí, y cuál es la mejor depende en gran medida de las preferencias personales y la estructura de su aplicación.

Una opción sería realizar toda la validación de entrada antes de llamar SpringApplication.run().Esto funcionaría para cualquier argumento de línea de comando, pero sería, en el mejor de los casos, engorroso para cualquier cosa configurada a través de application.properties.

En lugar de lanzar excepciones desde su @Bean métodos, podría detectarlos y manejarlos adecuadamente.Si el problema es menor, puede registrar una información o un mensaje de advertencia que explique el problema y permitir que la aplicación continúe.Si el problema es catastrófico, puede registrar un mensaje de error y luego llamar System.exit().Si bien esto proporcionará informes de errores fáciles de usar para cualquier excepción lanzada mientras su @Bean Se llaman métodos, aún le quedarán seguimientos de pila para cualquier excepción que ocurra después de eso.

Por último, podrías finalizar la llamada a SpringApplication.run() en un bloque try-catch.Luego podría examinar la excepción detectada y la cadena de causas para determinar un mensaje de error apropiado para registrar.La ventaja de este enfoque es que le permitirá proporcionar un mensaje de error fácil de usar para cualquier excepción que cause SpringApplication.run() fallar, no solo uno que se lanza desde dentro de uno de tus @Bean métodos.

Suponiendo que haya argumentos de línea de comandos para validar, probablemente usaría una combinación de la primera y la tercera opción.Para el primero, usaría una biblioteca CLI como JOpt Simple para facilitar un poco las cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top