我应该如何处理 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 注释方法中的异常会导致应用程序退出 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