如何解决如果出现异常,我如何以编程方式重新启动 Spring 应用程序?
我正在开发一个 Spring Boot 应用程序,该应用程序不时崩溃或出现一些奇怪的连接错误。如果在出现错误时重新启动应用程序是一个很好的解决方案,这是另一回事,但我仍然希望这是一种最后的手段。基本上我想了解如何在每次循环迭代后重新启动整个应用程序。我已经尝试过 Baeldungs tutorial on Programmatically Restarting a Spring Boot Application 但代码在这种方法中不起作用:
@SpringBootApplication
public class Application {
private static ConfigurableApplicationContext context;
public static void main(String[] args) {
context = SpringApplication.run(Application.class,args);
}
public static void restart() {
ApplicationArguments args = context.getBean(ApplicationArguments.class);
Thread thread = new Thread(() -> {
context.close();
context = SpringApplication.run(Application.class,args.getSourceArgs());
});
thread.setDaemon(false);
thread.start();
}
}
context 只包含一个空值,因此会抛出一个空指针异常。正如您在评论中看到的那样,我不是唯一遇到此问题的人。我还使用 org.springframework.boot.devtools.restart.Restarter 类
从评论部分尝试了解决方案在这里,您基本上可以看到我的主控制器的大循环,如果发生任何未处理的异常,它应该重新启动。
@Override
public void run(String... args) {
try {
while (true){
try {
mainController.run;
} catch (Exception | CacheDataException e){
log.error("Exception in Main controller");
Restarter.getInstance().restart();
} finally {
log.info("Restarting mainController.");
}
}
} finally {
log.info("Closing the application.");
this.sshSession.shutdown();
System.out.println(BananaUtils.bananansi("Tier 2 ends",Ansi.BLUE));
}
}
如果我这样做,但是我会收到大约 1000 个从 mainController 内部抛出的异常和错误,导致无休止地尝试重新启动应用程序,最终因溢出错误等而崩溃。
为什么它应该重新启动应用程序时甚至继续循环?什么是简单地重新启动应用程序的优雅方式。如果所有 bean 都被重置就足够了。我只是想让整个事情自我重置并从新开始。
有什么想法吗?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。