您的位置:首页 > 编程语言 > Java开发

给多台机器的Java应用程序写一个自动更新的程序

2011-08-21 06:35 309 查看



问题:现有70几台前置机要逐步安装Java应用程序,现已经在10台机器上已经安装了Java应用程序。如果代码有变动的话,只能通过远程桌面连接到前置机的电脑进行手工操作。这样一天时间都荒废在这种无聊的时间上了。


想法:利用已经搭建的FTP服务器来实现前置机程序自动更新,从而解放自己劳动,也能保证前置机程序的及时更新。


思路:

1、在前置机本地目录下创建测试目录D:/ftp,新建version/version.txt和startup.properties两个文件及文件夹,其中version.txt作为判断程序是否需要升级的主文件,startup.properties是更新完毕后要启动的Java应用程序目录。将更新程序配置到D:/ftp目录下。


2、在FTP服务器上固定程序下载目录ftp://XXX/update/,测试目录如下图:




3、运行前置机本地程序D:/ftp/update/update.bat文件,得到的目录结构如下图:





4、更新程序先从前置机本地文件检查获取version/version.txt文件,如果没有该文件,则先关闭运行的Java程序,并从ftp的update目录下载全部的资料包括version。如果version.txt存在读取的内存中, 从ftp服务器/update/version/version.txt上下载并覆盖到本地version/version.txt文件并读取到Java内存中,将内存中的versin对象进行比较若相同则不更新,否则进行更新。


5、更新完毕,释放相关资源,并启动关闭的Java应用程序。


思路图:




困难:

1、程序运行采用bat文件来启动运行,在进程中所有的Java运行程序都是Java.exe,怎么区分bat启动的Java.exe进程并来关闭?

2、FTP下载上传以及FTP指定目录下所有资源的遍历以前没有用Java写过,怎么实现?

3、程序关闭再次运行启动bat的命令设置,这里好绕人,花了一点时间。

解决:

第一个问题使用了一个本方法来解决的。bat文件启动的java.exe,那复制同一个在J2SE\bin里并重命名成自己指定的名字,修改bat调用自己重命名的java.exe,那样在window进程管理器里就可以看到自己命名的Java.exe,然后使用Runtime类执行cmd命令:taskkill /f /im java(重命名).exe就可以关闭所有启动进程。


第二个问题:在网络搜索一个前辈们写的相关代码,甄选出代码质量比较高的源代码作为自己学习FTP上传下载等相关操作的实例。使用Apache的Commons包的FTPClient API来实现FTP相关操作。


第三个问题:使用Runtime类的exec(String command)方法来执行 cmd.exe /c start /min +directory+xx.bat 命令,报出异常,无法正常运行,经过几番周折,了解的该方法的默认路径是启动该类bat文件所在的目录,这样就无法找到执行文件。后来调整目录可以找到的执行文件,但是无法正确启动关闭的程序,这还是由于启动的cmd新窗口的环境遍历不正确造成的。查询API找到exec(String[] cmdarray,String[] envp,File dir)这个方法,在API中描述:在指定环境和工作目录的独立进程中执行指定的命令和变量。这个正是想要用的。经过调整,终于可以正确启动关闭的bat文件了。


总结:

这个功能模块想的比较简单,代码实现也很简单,功能和程序上可能还有BUG。

异常捕捉和日志输出代码不更新了。 

源代码:http://download.csdn.net/source/3536310


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐