spring我应该如何处理Java Config@Bean方法中的已检查和未检查异常,以显示用户友好的错误原因?
我正在开发一个基于spring boot的命令行应用程序。主类有一个@Autowired注释字段@Autowired Repository repository;
,其构造方法在Java配置类中提供,该类有一个适当的@Bean注释方法@Bean Repository repository(){...}
@Bean注释的方法包含可以抛出已检查和未检查异常的代码。
@Bean Repository repository(){...//exceptions}
我的目标是创建一个用户友好的应用程序,它以适当的日志记录级别记录简短消息,而不是长堆栈跟踪
目前,Java Config@Bean注释方法中的一个异常会导致应用程序带着o.s.boot.SpringApplication: Application startup failed
消息和很长的堆栈跟踪退出
我想知道是否有一种好方法可以在Java Config@Bean注释的方法中至少处理典型的异常(我知道),以记录对故障排除有用的用户友好的简短消息
我假设这样的策略会期望将异常处理代码添加到Java配置类中,但我从未在公开可用的Java配置类中见过这样的代码,这表明Java配置类中的异常处理代码可能是一种不好的做法
多谢各位
# 1 楼答案
我认为你有几个选择,哪一个是最好的很大程度上取决于个人喜好和你的应用程序结构
一个选项是在调用
SpringApplication.run()
之前执行所有输入验证。这将适用于任何命令行参数,但对于通过application.properties
配置的任何东西,充其量也会很麻烦您不必从
@Bean
方法中抛出异常,而是可以捕获它们并适当地处理它们。如果问题很小,您可以记录一条信息或警告消息来解释问题,并允许应用程序继续。如果问题是灾难性的,您可以记录一条错误消息,然后调用System.exit()
。虽然这将为调用@Bean
方法时抛出的任何异常提供用户友好的错误报告,但之后发生的任何异常仍然会留下堆栈跟踪最后,您可以将对
SpringApplication.run()
的调用包装在try-catch块中。然后,您可以检查捕获的异常和原因链,以确定要记录的适当错误消息。这种方法的优点是,它允许您为导致SpringApplication.run()
失败的任何异常提供用户友好的错误消息,而不仅仅是从一个@Bean
方法中抛出的异常假设有命令行参数要验证,我可能会使用第一个和第三个选项的组合。首先,我将使用诸如joptsimple之类的CLI库,使事情变得更简单