如果出现异常,我如何以编程方式重新启动 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 (将#修改为@)