gpt4 book ai didi

java - 如何编写可以在运行时自行更新的 Java 应用程序?

转载 作者:IT老高 更新时间:2023-10-28 11:42:47 26 4
gpt4 key购买 nike

我想实现一个 java 应用程序(服务器应用程序),它可以从给定的 url 下载新版本(.jar 文件),然后在运行时自行更新。

最好的方法是什么?有可能吗?

我猜应用程序可以下载一个新的 .jar 文件并启动它。但是我应该如何进行移交,例如知道新应用程序何时启动然后退出。或者有更好的方法吗?

最佳答案

一个解决方案的基本结构如下:

  • 有一个主循环负责重复加载应用程序的最新版本(如果需要)并启动它。

  • 应用程序会做它的事情,但会定期检查下载 URL。如果它检测到新版本,则会退出到启动器。

您可以通过多种方式实现这一点。例如:

  • 启动器可以是一个包装脚本或二进制应用程序,它启动一个新的 JVM 以从被替换的 JAR 文件运行应用程序。

  • 启动器可以是一个 Java 应用程序,它为新 JAR 创建一个类加载器,加载一个入口点类并在其上调用一些方法。如果你这样做,你必须注意类加载器存储泄漏,但这并不难。 (您只需要确保在重新启动后无法访问具有从 JAR 加载的类的对象。)

外部包装方法的优点是:

  • 你只需要一个 JAR,
  • 您可以替换整个 Java 应用,
  • 应用等创建的任何辅助线程都将在没有特殊关闭逻辑的情况下消失,并且
  • 您还可以处理应用程序崩溃等问题的恢复。

第二种方法需要两个 JAR,但具有以下优点:

  • 该解决方案是纯 Java 且可移植的,
  • 转换会更快,并且
  • 您可以更轻松地在重启期间保留状态(模泄漏问题)。

“最佳”方式取决于您的具体要求。

还需要注意的是:

  • 自动更新存在安全风险。一般来说,如果提供更新的服务器受到威胁,或者提供更新的机制容易受到攻击,那么自动更新可能会导致客户端受到威胁。

  • 向客户推送对客户造成损害的更新可能会带来法律风险,并可能危及您的企业声誉。


如果您能找到避免重复造轮子的方法,那就太好了。请参阅其他答案以获取建议。

关于java - 如何编写可以在运行时自行更新的 Java 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com