有个项目,我真的烦,总是出问题,直接重启项目解决问题,细节以后再补,先记录实现过程。
@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 应用已重启!";
}