我在IntelliJ中有一个Spring Boot应用程序,最初配置为正常启动,如下所示:
public static void main(String[] args) throws Exception {
SpringApplication.run(AccountApiApplication.class, args).close();
}
我在main
方法中添加了一个try-catch块来处理启动期间发生的任何错误(比如缺少配置文件等),它现在看起来像:
public static void main(String[] args) throws Exception {
try {
SpringApplication.run(AccountApiApplication.class, args).close();
}
catch(Exception e) {
e.printStackTrace();
System.exit(1);
}
}
添加后,我的应用程序总是退出,退出代码为1.即使没有错误。我尝试打印正在发生的异常,它是这样的:
org.springframework.boot.devtools.restart.SilentExitExceptionHandler$SilentExitException
at org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread(SilentExitExceptionHandler.java:90)
at org.springframework.boot.devtools.restart.Restarter.immediateRestart(Restarter.java:184)
at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:163)
at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:552)
at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:67)
at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:45)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:68)
at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)
at edu.iu.es.ebs.AccountApiApplication.main(AccountApiApplication.java:90)
Process finished with exit code 1
为什么即使应用程序中没有错误,我也会看到此异常?虽然我们在这里,有没有比在main
中添加try-catch更好的方法来处理不可预测的启动错误?
答案 0 :(得分:2)
这是一种正常的Spring Boot应用程序工作方式,它的依赖项中包含org.springframework.boot:spring-boot-devtools
。默认情况下,org.springframework.boot.devtools.restart.Restarter
在初始化后立即重新启动应用程序。要摆脱SilentExitException
,你应该通过将属性spring.devtools.restart.enabled
设置为false
来摆脱重新启动器,但我不认为这个例外是一个大问题。
答案 1 :(得分:1)
首先,我认为问题是对close()
的调用。正如您在Stacktrace中看到的那样,该方法可以生成由SilentExitException
吞噬的SilentExitExceptionHandlerexample
。
其次,最好使用接口FailureAnalizer
来捕获应用程序启动时的错误,它可以为您提供有关错误的更多信息。