项目版本迭代难免需要重启应用,比较粗暴的方法是kill -9 pid,这种方式是直接通过操作系统命令杀死进程,用户未完成的请求也会被丢失掉,尤其是我们的应用中有队列任务的,要是队列中的任务没有持久化,那就全丢了。
这里通过关闭spring上下文的方式来优雅停机;
1:首先新增一个get方式的接口:
@GetMapping(path = "/shutDown")
public JsonResult shutDownApi(@RequestParam(name = "token") String token){
if ("111111111".equals(token)){
ConfigurableApplicationContext context = (ConfigurableApplicationContext) SpringUtil.getApplicationContext();
context.close();
return JsonResult.createSuccess("ok");
} else {
return JsonResult.createFail("invalid token");
}
}
ConfigurableApplicationContext 是spring启动的上下文环境,我们在springboot的启动类的main方法保留他的引用:
在linux中直接通过curl -v "http://host:port/api/shutDown?token=111111111"请求关机接口来实现安全地关闭应用。