Springboot实现软重启


@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();
    }
}

@RestController
public class RestartController {

    @PostMapping("/restart")
    public void restart() {
        Application.restart();
    }
}



在这个例子中,我们创建了一个新的非守护线程来重新创建上下文,这样我们可以防止由close方法触发的JVM关闭我们的应用程序。然后,我们添加了一个REST端点,通过它可以触发重启。

另外,Spring Boot Actuator的内置RestartEndpoint也可以用于重新启动应用程序1。但是,这需要在application.properties文件中启用内置的重启端点,并添加所需的Maven依赖项。




文章作者: 一剑潇
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 一剑潇 !
  目录
{% if theme.mermaid.enable %} {% endif %}