有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我认为你有几个选择,哪一个是最好的很大程度上取决于个人喜好和你的应用程序结构

    一个选项是在调用SpringApplication.run()之前执行所有输入验证。这将适用于任何命令行参数,但对于通过application.properties配置的任何东西,充其量也会很麻烦

    您不必从@Bean方法中抛出异常,而是可以捕获它们并适当地处理它们。如果问题很小,您可以记录一条信息或警告消息来解释问题,并允许应用程序继续。如果问题是灾难性的,您可以记录一条错误消息,然后调用System.exit()。虽然这将为调用@Bean方法时抛出的任何异常提供用户友好的错误报告,但之后发生的任何异常仍然会留下堆栈跟踪

    最后,您可以将对SpringApplication.run()的调用包装在try-catch块中。然后,您可以检查捕获的异常和原因链,以确定要记录的适当错误消息。这种方法的优点是,它允许您为导致SpringApplication.run()失败的任何异常提供用户友好的错误消息,而不仅仅是从一个@Bean方法中抛出的异常

    假设有命令行参数要验证,我可能会使用第一个和第三个选项的组合。首先,我将使用诸如joptsimple之类的CLI库,使事情变得更简单