javaweb项目war包自动升级部署方案_第1页
javaweb项目war包自动升级部署方案_第2页
javaweb项目war包自动升级部署方案_第3页
javaweb项目war包自动升级部署方案_第4页
javaweb项目war包自动升级部署方案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java web 项目 war 包自动升级部署方案、八 、-前言 之前,我们公司部署以及升级都是由运维去管理的,联想到 很多开源平台都支持自动升级,索性我也做个自动升级 war 的功能。这里没有用 docker 镜像发包,灰度发包等,只适用于单个 tomcat 的部署环境,支持 docker 单个 tomcat 容器。 分析先简单分析下 war 包自动升级流程:1. 检查是否需要更新。2. 下载更新的 war 包到服务器临时目录。 (如后台上传则无 需 1, 2 步骤)3. 停止 tomcat4. 清理 tomcat 下, webapps 的 war 包解压目录、 war 包。5. 启动 to

2、mcat 1,2 步骤中没有什么坑, 主要是 3,4,5 步骤, 如果用 java 代码去执行, 当 tomcat 服务关闭时, war 包内的代码将停止, 所以除非单独写个 java 程序跑才能继续执行下面代码。 但又 觉得这种方式麻烦,对环境依赖太高,最终采用 shell 脚本 去执行 3 ,4,5 步骤,而 java-web 去调用这个 shell 脚本即 可。实施检查更新 这一步比较简单,这里直接发送一个请求,带上版本号,如返回是否需要更新,以及更新地址:NeedUpdate: true,downUrl: 1234这里使用 httpclient 去调用接口:/*使用时注意字符集 GBK

3、UTF-8*/public static String visitPost(String urlStr, String code) tryURL url = new URL(urlStr);HttpURLConnection con =(HttpURLConnection)url.openConnection();con.setRequestMethod(GET);con.connect();BufferedReader reader = newBufferedReader(newInputStreamReader(con.getInputStream(),code););String lin

4、e;StringBuffer buffer = new StringBuffer();while(line = reader.readLine() != null) buffer.append(line);reader.close();con.disconnect();String res = buffer.toString();return res; catch(Exception e) e.printStackTrace();return null;类似方法有很多种,这里不举例。下载之后使用 fastjson 或 者 gson 或者纯 string 解析出内容即可。下载文件java 的下载

5、文件方法有很多种,都是以流的形式写,代码量 比较多,如果项目里有框架的话,直接用就可以了,没有的 话,网上找一个。/* 保存附件* 1 、保存附件信息到附件表* 2 、保存文件到相应的目录* param file 文件实体*/public boolean saveFile(FileEntity file) BufferedOutputStream bos = null; FileOutputStream fos = null; byte bytes = file.getBytes();if (bytes != null) try fos = new FileOutputStream(file_

6、Path + file.getName();bos = new BufferedOutputStream(fos); bos.write(bytes);bos.flush();IOUtils.closeQuietly(fos); IOUtils.closeQuietly(bos); return true; catch (Exception e) IOUtils.closeQuietly(fos);IOUtils.closeQuietly(bos);Log.error( 保存文件失败 , e); return false;return false;启动 shell 脚本runBatOrShel

7、l(packagename,System.getProperties().getProperty().indexOf(Windows) != -1)1 这里需要判断 Windows 还是 linux ,true 为 Windows ,否则 为 linux 。引入包名参数是为了得到 sh 文件及 bat 文件。private String tomcat_Path =System.getProperty(catalina.base) + File.separator;/ 务器路径/* 执行方法脚本* param 路径* param 系统*/public boolean runBatO

8、rShell( String name, boolean os) L(runBatOrShellstart : );String _path;try _path = os ?this.getClass().getResource(/batshell/web.bat).getPath() + + file_Path + + name + + tomcat_Path : sh + this.getClass().getResource(/batshell/web.sh).getPath() + + file_Path + + name + + tomcat_Path;L

9、(_path);Process ps =Runtime.getRuntime().exec(_path);BufferedReader br = newBufferedReader(new、/. I、, G :注意InputStreamReader(ps.getInputStream(), UTF-8);/ 中文编码问题String line;while (line = br.readLine() != null) L(runBatOrShell info= + line);br.close(); catch (IOException ioe) Log.error(runBatO

10、rShell error !);ioe.printStackTrace();return false;return true;这里引入 tomcat 路径是为了方便脚本执行。sh web.sh 空格 war 文件目录空格文件名空格 tomcat 目录bat 文件同理文件目录如下: shell 脚本执行#!/bin/shcd $1echo $(date +%Y-%m-%d-%l:%M:%S) webvlog.txt;echo $2webvlog.txt;echo 正在关闭 tomcatwebvlog.txt;sh $3/bin/shutdown.shecho 正在执行删除 war.warwebvlog.txt;rm $3/webapps/war.war;echo 正在执行删除 war 文件夹 webvlog.txt;rm -r $3/webapps/war;echo 正在部署 warwebvlog.txt;cp $1$2 $3/webapps/war.warecho 正在重启 tomcatwebvlog.txt;sh $3/bin/startup.shecho 部署成功 w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论