c mysql更新图片_基于tomcat+mysql的c/s模式上的系统自动更新

基于tomcat+mysql的c/s模式下的系统自动更新

产品化的系统免不了要实现的就是系统的自动更新,下边讲讲我在工作中实现的win下的产品自动更新。

自动更新步骤:

1、本地系统版本与服务器最新版本比对。

2、发现更新版本后进行升级版下载。

3、关闭应用服务器,更新本地程序,清除缓存,执行sql脚本,重启应用服务器

其中1、2步我是使用java实现的,使用了HttpClient来与服务器端(这里是相对应终端客户来说,指的是产品提供商的运营平台)进行交互,发现更新版本后下载到终端客户本地第3部是借用bat命令来实现的,关闭tomcat,解压下载包,清空tomcat缓存文件夹work,执行sql脚本,重启应用并提醒维平台更新完成。

如下代码为进行版本比对并下载服务器端更新文件

public class VersionUpdate { protected int connectTimeout = 30 * 1000; // 连接超时:30s protected int readTimeout = 1 * 1000 * 1000; // IO超时:1min //标识,是否存在新的更新文件 private boolean isUpdated = false; //当前系统版本 private String localVerStr ; //保存最新的版本 String netVersion; public void update() { SystemManager manager = (SystemManager)BeanFactoryProxy.getBean("systemManager"); Register register = manager.getRegister(); localVerStr = this.getNowVer(StringUtils.replaceAll(register.getPhysicalPath(), '//', '/')+"/webapps/quickLMS/WEB-INF/classes/ver.txt"); /* 这里是通过HTTP访问一个页面,以取得网络上的版本号 比如这里就是在这个页面直接打印出 6.19.1.1 然后把这个版本号比对本地的版本号,如果版本号不同的话,就从网络上下载新的程序并覆盖现有程序 */ //读取网络上的版本号 try { netVersion = HttpPostUtil.doGet(ConstLMS.NEW_VERSION); if (netVersion.equals(localVerStr)) { System.out.println("当前文件是最新版本"); isUpdated = false; } else { System.out.println("存在更新文件,现在开始更新"); isUpdated = true; } }catch (Exception ex) { ex.printStackTrace(); } //如果版本不同,下载网络上的文件,更新本地文件 if (isUpdated) { //缓存网络上下载的文件 File newFile = new File(register.getPhysicalPath()+"/webapps/" + StringUtils.DateToStr(new Date(), "yyyyMMdd")+".zip"); //获取网络上的文件位置 String netFileAddress = ConstLMS.MNG_ADDRESS+HttpPostUtil.doGet(ConstLMS.NEW_VERSION_ADDRESSS+"&sn="+register.getSn()); FileOutputStream fos = null; BufferedInputStream bis = null; try { //打开URL通道 URL url = new URL(netFileAddress); URLConnection conn = url.openConnection(); conn.setConnectTimeout(connectTimeout); conn.setReadTimeout(readTimeout); conn.connect(); bis = new BufferedInputStream(conn.getInputStream()); byte[] buffer = new byte[1024]; int size = 0; fos = new FileOutputStream(newFile); System.out.println("正在从网络上下载新的更新文件"); //保存文件 try { while ((size = bis.read(buffer)) != -1) { fos.write(buffer, 0, size); fos.flush(); } } catch (Exception ex4) { System.out.println(ex4.getMessage()); } System.out.println("文件下载完成"); } catch (Exception ex) { System.out.println("文件读取错误"); } finally { try{ if(bis!=null){ bis.close(); } }catch(Exception exp){ exp.printStackTrace(); } try { if(fos!=null){ fos.close(); } } catch (IOException exp) { exp.printStackTrace(); } } batExec(register.getPhysicalPath()); } } private String getNowVer(String nowVersionURL) { //本地版本文件 File verFile = new File(nowVersionURL); FileReader is = null; BufferedReader br = null; //读取本地版本 try { is = new FileReader(verFile); br = new BufferedReader(is); String ver = br.readLine(); return ver; } catch (FileNotFoundException ex) { System.out.println("本地版本文件未找到"); } catch (IOException ex) { System.out.println("本地版本文件读取错误"); } finally { //释放资源 try { br.close(); is.close(); } catch (IOException ex1) { } } return ""; } public void batExec(String webapps){ try { Runtime.getRuntime().exec("cmd.exe /c start "+StringUtils.replaceAll(webapps, '//', '/')+"/startup.bat"); } catch (IOException e) { e.printStackTrace(); } } }

欢迎大家阅读《基于tomcat+mysql的c/s模式上的系统自动更新》,跪求各位点评,by 搞代码

bat脚本

set now=%date:~0,10% set now=%now:-=% set TOMCAT_HOME=%cd% set webapps=%cd%/webapps echo %webapps% if exist "%webapps%/%now%.zip" goto shutdown echo not find %webapps%/%now%.zip :shutdown call "%TOMCAT_HOME%/bin/shutdown.bat" %1 if errorlevel 1 goto unzip :unzip cd %webapps% unzip -o "%webapps%/%now%.zip" del "%webapps%/%now%.zip" /q/f :execSql cd.. cd.. if not exist "%cd%/mysql" goto startup set MYSQL_HOME="%cd%/mysql" cd "%MYSQL_HOME%/bin" mysql -uroot -proot -Dquicklms -s -e "source %webapps%/update.sql" del %webapps%/update.sql /q/f :startup cd %TOMCAT_HOME% %TOMCAT_HOME%/bin/startup.bat echo %TOMCAT_HOME% :delwork cd %TOMCAT_HOME% rd %TOMCAT_HOME%/work /s/q :end

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值