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

本文介绍了一种Windows下产品的自动更新机制,包括版本对比、更新文件下载、更新执行等关键步骤。使用Java和bat脚本实现了从服务器检查最新版本、下载更新文件,并通过批处理命令重启服务和清理缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转摘自:http://zouzaibianyuan.iteye.com/blog/1527265


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

自动更新步骤:

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

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

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

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

 

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

 

进行版本比对于服务器更新文件下载代码   收藏代码
  1. public class VersionUpdate {  
  2.     protected int connectTimeout = 30 * 1000; // 连接超时:30s  
  3.     protected int readTimeout = 1 * 1000 * 1000; // IO超时:1min  
  4.       
  5.     //标识,是否存在新的更新文件  
  6.     private boolean isUpdated = false;  
  7.     //当前系统版本  
  8.     private String localVerStr ;  
  9.     //保存最新的版本  
  10.     String netVersion;  
  11.   
  12.     public void update() {  
  13.         SystemManager manager = (SystemManager)BeanFactoryProxy.getBean("systemManager");  
  14.         Register register = manager.getRegister();  
  15.         localVerStr = this.getNowVer(StringUtils.replaceAll(register.getPhysicalPath(), '\\', '/')+"/webapps/quickLMS/WEB-INF/classes/ver.txt");  
  16.         /*  
  17.             这里是通过HTTP访问一个页面,以取得网络上的版本号  
  18.             比如这里就是在这个页面直接打印出 6.19.1.1  
  19.             然后把这个版本号比对本地的版本号,如果版本号不同的话,就从网络上下载新的程序并覆盖现有程序  
  20.         */  
  21.         //读取网络上的版本号  
  22.         try {  
  23.             netVersion = HttpPostUtil.doGet(ConstLMS.NEW_VERSION);  
  24.             if (netVersion.equals(localVerStr)) {  
  25.                 System.out.println("当前文件是最新版本");  
  26.                 isUpdated = false;  
  27.             } else {  
  28.                 System.out.println("存在更新文件,现在开始更新");  
  29.                 isUpdated = true;  
  30.             }  
  31.         }catch (Exception ex) {  
  32.             ex.printStackTrace();  
  33.         }  
  34.         //如果版本不同,下载网络上的文件,更新本地文件  
  35.         if (isUpdated) {  
  36.             //缓存网络上下载的文件  
  37.             File newFile = new File(register.getPhysicalPath()+"/webapps/" + StringUtils.DateToStr(new Date(), "yyyyMMdd")+".zip");  
  38.             //获取网络上的文件位置  
  39.             String netFileAddress = ConstLMS.MNG_ADDRESS+HttpPostUtil.doGet(ConstLMS.NEW_VERSION_ADDRESSS+"&sn="+register.getSn());  
  40.             FileOutputStream fos = null;  
  41.             BufferedInputStream bis = null;  
  42.             try {  
  43.                  //打开URL通道  
  44.                 URL url = new URL(netFileAddress);  
  45.                 URLConnection conn = url.openConnection();  
  46.                 conn.setConnectTimeout(connectTimeout);  
  47.                 conn.setReadTimeout(readTimeout);  
  48.                 conn.connect();  
  49.                 bis = new BufferedInputStream(conn.getInputStream());  
  50.                 byte[] buffer = new byte[1024];  
  51.                 int size = 0;  
  52.                 fos = new FileOutputStream(newFile);  
  53.                 System.out.println("正在从网络上下载新的更新文件");  
  54.                 //保存文件  
  55.                 try {  
  56.                     while ((size = bis.read(buffer)) != -1) {  
  57.                         fos.write(buffer, 0, size);  
  58.                         fos.flush();  
  59.                     }  
  60.                 } catch (Exception ex4) {  
  61.                     System.out.println(ex4.getMessage());  
  62.                 }  
  63.                 System.out.println("文件下载完成");  
  64.             } catch (Exception ex) {  
  65.                 System.out.println("文件读取错误");  
  66.             } finally {  
  67.                 try{  
  68.                     if(bis!=null){  
  69.                         bis.close();  
  70.                     }  
  71.                 }catch(Exception exp){  
  72.                     exp.printStackTrace();  
  73.                 }  
  74.                 try {  
  75.                     if(fos!=null){  
  76.                         fos.close();  
  77.                     }  
  78.                 } catch (IOException exp) {  
  79.                     exp.printStackTrace();  
  80.                 }  
  81.             }  
  82.             batExec(register.getPhysicalPath());  
  83.         }  
  84.     }  
  85.     private String getNowVer(String nowVersionURL) {  
  86.         //本地版本文件  
  87.         File verFile = new File(nowVersionURL);  
  88.         FileReader is = null;  
  89.         BufferedReader br = null;  
  90.         //读取本地版本  
  91.         try {  
  92.             is = new FileReader(verFile);  
  93.             br = new BufferedReader(is);  
  94.             String ver = br.readLine();  
  95.             return ver;  
  96.         } catch (FileNotFoundException ex) {  
  97.             System.out.println("本地版本文件未找到");  
  98.         } catch (IOException ex) {  
  99.             System.out.println("本地版本文件读取错误");  
  100.         } finally {  
  101.             //释放资源  
  102.             try {  
  103.                 br.close();  
  104.                 is.close();  
  105.             } catch (IOException ex1) {  
  106.             }  
  107.         }  
  108.         return "";  
  109.     }  
  110.     public void batExec(String webapps){  
  111.         try {  
  112.             Runtime.getRuntime().exec("cmd.exe /c start "+StringUtils.replaceAll(webapps, '\\', '/')+"/startup.bat");  
  113.         } catch (IOException e) {  
  114.             e.printStackTrace();  
  115.         }  
  116.     }  
  117. }  

 bat脚本

解压更新文件执行sql脚本重启应用代码   收藏代码
  1. set now=%date:~0,10%  
  2. set now=%now:-=%  
  3. set TOMCAT_HOME=%cd%  
  4. set webapps=%cd%\webapps  
  5. echo %webapps%  
  6. if exist "%webapps%\%now%.zip" goto shutdown  
  7. echo not find %webapps%\%now%.zip  
  8.   
  9. :shutdown  
  10. call "%TOMCAT_HOME%\bin\shutdown.bat" %1  
  11. if errorlevel 1 goto unzip  
  12.   
  13. :unzip  
  14. cd %webapps%  
  15. unzip -o "%webapps%\%now%.zip"   
  16. del "%webapps%\%now%.zip"  /q/f  
  17.   
  18. :execSql  
  19. cd..  
  20. cd..  
  21. if not exist "%cd%\mysql" goto startup  
  22. set MYSQL_HOME="%cd%\mysql"  
  23. cd "%MYSQL_HOME%\bin"  
  24. mysql -uroot -proot -Dquicklms -s -e "source %webapps%\update.sql"  
  25. del %webapps%\update.sql /q/f  
  26.   
  27. :startup  
  28. cd %TOMCAT_HOME%  
  29. %TOMCAT_HOME%\bin\startup.bat  
  30. echo %TOMCAT_HOME%  
  31.   
  32. :delwork  
  33. cd %TOMCAT_HOME%  
  34. rd %TOMCAT_HOME%\work /s/q  
  35.   
  36. :end  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值