我正在开发一个应用程序,在bean的post构造方法中,我正在添加一些逻辑来创建一个对象。现在,我想要做的是,如果有异常并且对象的创建有一些错误,那么不要让应用程序启动。是的,我可以看到在启动时控制台上抛出一个异常,如果对象的构造有任何问题,但是我想要一些更好的东西告诉我一个对象的构造失败了,什么比应用程序无法启动更好的标准。
非常感谢任何帮助。
提前谢谢你。
答案 0 :(得分:2)
您可以针对此类要求查找FailureAnalyzer
,以便在应用程序启动失败时提供其他信息。如果在应用程序启动期间引发任何异常,则将按顺序调用所有FailureAnalyzer类。如果任何FailureAnalyzer类返回FailureAnalysis
对象,则该异常将不会传播到其他FailureAnalysis类。
请确保在resource/META-INF/spring.factories
文件中注册FailureAnalysis课程。
@Component
public class SomeObject {
@PostConstruct
public void init() throws Exception {
throw new Exception("SomeObject init threw exception");
}
}
public class ObjConstructionFailureAnalyzer extends
AbstractFailureAnalyzer<BeanCreationException> {
@Override
protected FailureAnalysis analyze(Throwable rootFailure,
BeanCreationException cause) {
System.out.println("\n===>ObjConstructionFailureAnalyzer::analyze()\n");
String desciption = "Object creation failed, [Reason]: " +
cause.getMessage();
String action = "Please handle exceptions in your init methods";
return new FailureAnalysis(desciption, action, cause);
}
}
在spring.factories
档案
org.springframework.boot.diagnostics.FailureAnalyzer=examples.stackoverflow.ObjConstructionFailureAnalyzer
异常堆栈跟踪
===&GT; ObjConstructionFailureAnalyzer ::分析()
2018-02-21 10:16:59.552 ERROR 9500 --- [主要] o.s.b.d.LoggingFailureAnalysisReporter:
***************************申请失败
说明
对象创建失败,[原因]:创建名称为bean的错误 'someObject':init方法的调用失败;嵌套异常是 java.lang.Exception:SomeObject init抛出异常
动作:
请处理init方法中的异常
您还可以访问here以获取代码示例。