Spring Boot アプリケーションをプログラムから再起動する

Spring Boot アプリケーションをプログラムから再起動する場合

参考 https://www.baeldung.com/java-restart-spring-boot-app

アプリケーションクラス内にリスタートのスタティックメソッドを用意しておく.
あとはControllerとかでエンドポイント作って呼び出してあげる.


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