论坛首页 Java企业应用论坛

web程序在线更新实现

浏览 16420 次
精华帖 (11) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-21  
    说说以前的一个web程序在线更新实现,给没有实现过的人们提供一点思路,这是我一个项目的实现,也许方式不是很好,但是它实现了基本的需求。
    
    公司的开发了一个web产品,这个web产品部署在全国很多地方有客户,但是由于后期的功能提升和bug修改,就需要对部署在客户处的web程序进行更新,但是由于部署比较分散,更新起来比较麻烦,并且由于客户有较多不懂软件,给他们提供更新包对于他们来说也不是很好,所以,需要一个自动更新的实现,以前在实现这个功能的时候,在网上找过,感觉这方面的资料和实现很少,所以就自己摸索着实现了。以下是实现思路,没什么新技术,就是一些技术的融合而已:
  
   1、更新数据:
         web程序更新存在程序更新、数据库更新、服务器更新;
        程序更新涉及的主要是程序文件、配置文件更新。数据库更新涉及数据库数据、表结构更新、服务器更新,主要是服务器版本升级。

   2、实现方式:
        1)、本地提供更新服务器,在更新服务器上提供程序版本记录标志、程序更新包(里面含更新策略,如,更新程序文件覆盖路径、或者添加路径,数据库数据文件,表结构更新文件、服务器更新(这个正常更新应该比较少))。
       
        2)、web产品上含有程序更新包下载功能,这个含自动或主动,所谓自动就是在程序上设置定时更新功能,程序在某个时刻自动检测服务器版本,并于本地版本进行对比,如果有更新就自动更新,如果没有,则不更新。主动更新就是需要人为的点击之后进行对比更新。
       
        3)、在每次更新时,web程序将更新服务器上的更新包下载到本地,然后进行自动解压,之后解压包中提提供了程序文件更新策略、数据库更新策略,依照更新策略进行程序的更新。但是,由于会存在程序无法更新的情况,我的实现是,对于部署在windows上的程序更新,我使用java提供了一个exe可执行文件,直接调用这个exe程序来进行程序的更新,在更新时,先启动exe文件,然后停止web服务器,再进行程序的更新,更新完成后,直接通过exe启动web服务器,这样整个过程都不需要人进行干预。如果是非windows操作系统,使用shell(只考虑了unix家族的实现)脚本调用一个java程序来进行程序的更新操作,基本同上。

        4)、在更新时,能使用本地服务器进行的更新部分,尽量使用本地服务器进行更新,如:数据库数据文件及表结构的更新,不能的才选择exe更新程序或脚本启动程序进行更新。
        
        5)、因为在更新程序时服务器会停止,这样将影响用户的使用,所以,要尽量选择在使用较少的时候进行程序的更新操作(这是我实现这个程序最大缺点,因为如果一个服务器不能停止或者停止程序影响非常大的话,这样的更新方式将不可行,但是正常情况如果我们有程序更新也还是要停止服务器的)。
      
        6)、如果客户无法上网或者说无法上外网的话,上面的更新策略也存在问题,这样的话就给他提供更新包,然后提供更新包存放的位置,直接运行exe或者shell脚本文件。当然这样的话对于服务器启动或停止,数据文件的更新都需要考虑好如果进行。


  以上是我实现的一些方式和注意点。欢迎大家指正。因为实现没什么新技术,所以,代码就不提供了(公司产品程序)。
       
        

       
        
   发表时间:2010-02-21  
难道大家都没有这方面的需求,或者说有其它更好的实现,请大家给谈谈吧。
0 请登录后投票
   发表时间:2010-02-21  
一个ant脚本就ok鸟~`
0 请登录后投票
   发表时间:2010-02-21  
guooscar 写道
一个ant脚本就ok鸟~`

也许可以实现(没实现过),但应该没有那么简单吧。
0 请登录后投票
   发表时间:2010-02-21  
flyeagle 写道
guooscar 写道
一个ant脚本就ok鸟~`

也许可以实现(没实现过),但应该没有那么简单吧。

灰常简单~灰常强大
0 请登录后投票
   发表时间:2010-02-21   最后修改:2010-02-21
guooscar 写道
一个ant脚本就ok鸟~`


恕俺无知,楼主希望知道的是更新程序的时候不影响用户访问,和ant半毛钱关系没有,难道你家ant已经进化到这种程度了?
一般是通过apache+n个tomcat来实现的,这也只能把对用户的影响降到最少,做不到毫无影响
0 请登录后投票
   发表时间:2010-02-21  
这方面需求主要是在产品化的WEB软件上,比如OA等,如果你的产品时分发给很多用户在用,分布在全国,你要更新的话就需要楼主说的这个需求了。但是最重要的是数据库的更新,如果更新一次数据没有了,那用户可能就会放弃。
0 请登录后投票
   发表时间:2010-02-21  
LZ的整个方案应该是比较全面的

ANT完成单个的工作应该没问题

但要实现整个需求,应该还是要考虑很多问题。。。
0 请登录后投票
   发表时间:2010-02-21  
     
   我知道我的方案还存在很多缺陷,尤其是在更新时需要将服务器停止,但是,像windows操作系统如果我们对某个文件进行更新的话,但是这个文件正在被人浏览,由于安全性原因将无法覆盖也就达不到更新的目的,所以,需要先将服务器停止,也就直接导致了这个文件不能在使用状态,然后覆盖更新。所以我才考虑提供一个专门的更新程序,这样保证在服务器停止之后也能进行更新,其实这个更新程序可以不使用java,但是由于跨平台以原因,所以我选择在windwos操作系统上打成可运行的exe程序,在unix系统下同样使用脚本来启动更新程序,完了再启动应用服务器。


如果是自动更新,设置定时器,选择在某天的凌晨更新这样在整个更新过程中对用的影响较小,并且不需要人为的来干预程序的更新。
 
  也许大家有更好的实现方式,可能是对这样的需求较少,网上关于这方面的资料和实现也比较少,所以是摸索着实现的,如果有更好的方案请大家指点一下。
0 请登录后投票
   发表时间:2010-02-22  
更新的时候会停止服务器的话只能告诉用户,让他自己选择了
在windows下如果要覆盖掉一些文件的话,不可避免要停止服务的啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics