前言
之前,我们公司部署以及升级都是由运维去管理的,联想到很多开源平台都支持自动升级,索性我也做个自动升级war的功能。
这里没有用docker镜像发包,灰度发包等,只适用于单个tomcat的部署环境,支持docker单个tomcat容器。
分析
先简单分析下war包自动升级流程:
- 检查是否需要更新。
- 下载更新的war包到服务器临时目录。(如后台上传则无需1,2步骤)
- 停止tomcat
- 清理tomcat下,webapps的war包解压目录、war包。
- 启动tomcat
1,2步骤中没有什么坑,主要是3,4,5步骤,如果用java代码去执行,当tomcat服务关闭时,war包内的代码将停止,所以除非单独写个java程序跑才能继续执行下面代码。但又觉得这种方式麻烦,对环境依赖太高,最终采用shell脚本去执行3,4,5步骤,而java-web去调用这个shell脚本即可。
实施
检查更新
这一步比较简单,这里直接发送一个请求,带上版本号,如:
a.com/checkVersio…
返回是否需要更新,以及更新地址:
{
"NeedUpdate": true,
"downUrl": "http://a.com/1.0.war"
}复制代码
这里使用httpclient去调用接口:
/*使用时注意字符集 "GBK""UTF-8"*/
public static String visitPost(String urlStr, String code) {
try{
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET