我想实现一个Java应用程序(服务器应用程序),该应用程序可以从给定的URL下载新版本(.jar文件),然后在运行时进行自身更新。
最好的方法是什么,有可能吗?
我猜该应用程序可以下载一个新的.jar文件并启动它。但是我应该如何进行切换,例如知道何时启动新应用程序然后退出。还是有更好的方法来做到这一点?
解决方案的基本结构如下:
有一个主循环负责重复加载应用程序的最新版本(如果需要)并启动它。
该应用程序会执行其操作,但会定期检查下载URL。如果检测到新版本,它将返回启动器。
您可以通过多种方法来实现此目的。例如:
启动器可以是包装脚本或二进制应用程序,它可以启动新的JVM,以从被替换的JAR文件中运行该应用程序。
启动器可以是Java应用程序,它为新的JAR创建类加载器,加载入口点类并在其上调用一些方法。如果以这种方式执行此操作,则必须注意类加载器存储泄漏,但这并不困难。(您只需要确保重新启动后无法访问从JAR加载的类的对象即可。)
外部包装方法的优点是:
第二种方法需要两个JAR,但具有以下优点:
“最佳”方式取决于您的特定要求。
还应注意:
自动更新存在安全风险。通常,如果提供更新的服务器受到损害,或者提供更新的机制容易受到攻击,则自动更新可能会导致客户端受到损害。
向客户推送更新可能导致客户损失的更新可能具有法律风险,也可能威胁到您的企业声誉。
如果您能找到避免重新发明轮子的方法,那将是很好的。请参阅其他答案以获取建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句