사용자에게 친숙한 오류 원인을 표시하려면 Java Config @Bean 메소드에서 확인된 예외와 확인되지 않은 예외를 어떻게 처리해야 합니까?[복제하다]
-
20-12-2019 - |
문제
저는 작은 spring-boot 기반 명령줄 응용 프로그램을 개발 중입니다.메인 클래스에는 @Autowired 주석이 달린 필드가 있습니다. @Autowired Repository repository;
적절한 @Bean 주석 메서드가 있는 Java Config 클래스에 구성 레시피가 제공됩니다. @Bean Repository repository(){...}
.
@Bean-annotated 메소드에는 확인된 예외와 확인되지 않은 예외를 발생시킬 수 있는 코드가 포함되어 있습니다.@Bean Repository repository(){...//exceptions}
내 목표는 긴 스택 추적이 아닌 적절한 로깅 수준에서 간단한 메시지를 기록하는 사용자 친화적인 애플리케이션을 만드는 것입니다.
현재 Java Config @Bean 주석 메소드의 예외로 인해 애플리케이션이 종료됩니다. 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
행동 양식.
유효성을 검사할 명령줄 인수가 있다고 가정하면 아마도 첫 번째 옵션과 세 번째 옵션을 조합하여 사용할 것입니다.먼저 JOpt Simple과 같은 CLI 라이브러리를 사용하여 작업을 좀 더 쉽게 만들겠습니다.