SpringBoot 生产环境自动重启

121 阅读1分钟

有个项目,我真的烦,总是出问题,直接重启项目解决问题,细节以后再补,先记录实现过程。

@SpringBootApplication
@MapperScan("com.example.modbus2.dao")
public class Modbus2Application {

    private static ConfigurableApplicationContext context;

    private static String[] args;

    public static void main(String[] args) {
        Modbus2Application.args = args;
        context = SpringApplication.run(Modbus2Application.class, args);
    }

    public static void restart() {
        // 使用一个线程池异步关闭应用并重启
        ExecutorService threadPool = new ThreadPoolExecutor(1, 1, 0, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(1), new ThreadPoolExecutor.DiscardOldestPolicy());

        threadPool.execute(() -> {
            // 关闭当前上下文
            context.close();
            // 重新启动应用
            context = SpringApplication.run(Modbus2Application.class, args);
        });
        threadPool.shutdown();
    }

}

通过接口重启

/**
 * 重启SpringBoot程序
 */
@RequestMapping("/restart")
public String restart() {
    System.out.println("重启SpringBoot程序");
    Modbus2Application.restart();
    return "Spring Boot 应用已重启!";
}