首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot:以编程方式重新启动,包括VM和程序参数以及类路径

Spring Boot:以编程方式重新启动,包括VM和程序参数以及类路径
EN

Stack Overflow用户
提问于 2021-04-07 19:08:53
回答 1查看 87关注 0票数 1

我们有一个spring boot web应用程序,我们用一个经过修改的、扩展的启动命令启动,如下所示:

代码语言:javascript
复制
java -classpath "..." -Dlogging.config="..." org.springframework.boot.loader.JarLauncher --debug --spring.config.location="..."

现在,我们需要以编程方式(例如,通过端点)重新启动此应用程序,但我们需要确保“使用相同的启动命令”。

我找到了这个solution on bealdung

代码语言:javascript
复制
@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();
    }
}

在这种情况下,可以使用bean ApplicationArguments提取程序参数。

到目前为止,我还没有找到一种方法来对VM参数和上面的命令中看到的类路径扩展执行相同的操作。

这有可能吗?考虑到所有这些要求,有没有一种更方便的方法来重启spring boot应用程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 19:35:48

您在教程中找到的方法不会重新启动整个JVM进程,它会关闭应用程序上下文并重新创建它。这意味着所有bean都会再次加载,这在逻辑上等同于重新启动,因为所有对象都是由Spring或course管理的。

还有一种方法可以在不编写自定义代码的情况下进行这样的重启-使用Spring Boot的执行器,它有一个restart端点。您可以调用端点,应用程序将以与您所描述的相同的方式重新启动。请看this tutorial for example,还有很多其他的。

在这两种方式中,都将有相同的JVM进程(jvm不会重新启动),因此类路径和JVM参数将保持不变(不更改)。

因此,如果你想重新启动JVM,你可以把这个长命令打包成某种脚本(比如bash,如果你在linux上工作,或者*.bat文件在windows上)。

除此之外,spring boot帮不了什么忙--从这个角度来看,它是一个普通的java应用程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66984863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档