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

 
问题:现有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
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值