当前位置: 首页 > 面试题库 >

您如何远程更新Java应用程序?

公西光华
2023-03-14
问题内容

我们有一个Java服务器应用程序,该应用程序可以在许多计算机上运行,​​所有计算机都连接到Internet,其中一些位于防火墙后面。我们需要从一个中央站点远程更新JAR文件和启动脚本,而不会明显中断应用程序本身。

该过程必须无人值守且万无一失(即,由于不及时的互联网中断,我们无法中断应用程序)。

过去,我们使用各种外部脚本和实用程序来处理类似的任务,但是由于它们具有自己的依赖性,因此难以维护且移植性较差。在提出新的东西之前,我希望获得社区的一些意见。

有人找到了一个好的解决方案吗?有任何想法或建议吗?

需要说明的是:此应用是服务器,但不适用于Web应用(此处没有webapp容器或WAR文件)。 它只是一个自治的Java程序。


问题答案:

您没有指定服务器应用程序的类型-
我将假设您没有在运行Web应用程序(因为部署WAR已经完成了您所谈论的内容,并且您很少需要Web应用程序来执行拉类型如果您正在谈论一个Web应用程序,那么下面的讨论仍然可以适用-
您只需为WAR文件而不是单个文件实施更新检查和乒乓球)。

您可能想看看jnlp-
WebStart基于此(这是一种客户端应用程序部署技术),但是我很确定它可以针对服务器类型应用程序执行更新而定制。无论如何,jnlp在提供可用于下载所需JAR的所需版本的描述符方面做得非常好。

对此有一些一般性的想法(我们在同一个存储桶中有多个应用程序,并且正在考虑自动更新机制):

  1. 在启动应用程序之前,请考虑具有bootstrap.jar文件,该文件能够读取jnlp文件并下载所需/更新的jar。

  2. 即使在应用程序运行时(至少在Windows上,这也是操作系统最有可能对正在运行的文件进行锁定的操作系统), 可以更新JAR文件。如果您使用自定义类加载器,或者随时都有可能加载或卸载一堆JAR,则可能会遇到问题,但是如果您要创建防止这种情况的机制,则应覆盖JAR,然后重新启动该应用足以进行更新。

  3. 即使有可能覆盖JAR,您也可能需要考虑使用lib路径的乒乓方法(如果尚未将应用启动器配置为自动读取lib文件夹中的所有jar文件并将其添加到类路径,那么那是您真正想要做的事情)。乒乓球的工作方式如下:

应用程序启动并查看lib-ping \ version.properties和lib-pong \
version.properties并确定哪个较新。假设lib-ping具有更高版本。启动器将搜索lib-ping * .jar并将这些文件html" target="_blank">添加到CP中。当您进行更新时,您将jar文件下载到lib-pong中(或者,如果您想节省带宽并且JAR并未实际更改,则可以从lib-
ping复制jar文件-不过,这很少值得付出!)。将所有JAR复制到lib-
pong之后,最后要做的就是创建version.properties文件(这样,可以检测到并清除导致部分lib文件夹的中断更新)。最后,您重新启动该应用程序,然后引导程序选择lib-
pong是所需的类路径。

  1. 如上所述的乒乓允许回滚。如果您设计正确,则可以在自己的应用程序中进行测试,然后再进行更改以检查它是否应回滚给定版本。这样,如果您搞砸了并部署了破坏应用程序的内容,则可以使版本无效。应用程序的这一部分只需要从错误的lib- *文件夹中删除version.properties文件,然后重新启动即可。重要的是要使这部分污物简单,因为这是您的故障保护。

  2. 您可以拥有2个以上的文件夹(例如,代替ping / pong,仅拥有lib-yyyymmdd并清除除最新的5个文件夹之外的所有文件夹)。这允许更高级(但更复杂!)的JAR回滚。



 类似资料:
  • 如果1要更新应用程序,请从控制台执行操作。。1.单击部署。2.选择应用程序名称并单击更新选项。3、在这里,他可以改变: 现在在我的应用程序中没有指定计划路径,所以要更新应用程序,我只更改源路径。应用程序已成功更新。 我想通过提供新的源路径,使用wlst命令更新应用程序。有可能吗? 喜欢 updateApplication('backoffice','path\ to\ the\ ear\ file

  • 问题内容: 我有一个在Linux机器上运行的Java应用程序。我使用以下命令运行Java应用程序: 我已经在此Linux机器上为TCP打开了端口4000。我使用Windows XP计算机上的eclipse,并尝试连接到此应用程序。我也在Windows中打开了端口。 这两台机器都在LAN上,但是我似乎无法将调试器连接到Java应用程序。我究竟做错了什么? 问题答案: 我注意到有些人在这里剪切和粘贴该

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 Updating Applications There are several ways to update an Electron application. The easiest and officially supported one is

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 使用 update.electronjs.org Electron 团队维护 update.electronjs.org,一个免费开源的网络服务,可以让 Electron 应用使用自动更新。 这个服务是设计给那些满足以下标准的 Electron 应

  • 问题内容: 如何重新启动Java AWT应用程序?我有一个附加了事件处理程序的按钮。我应该使用什么代码来重新启动应用程序? 我想做与应用程序中相同的事情。 问题答案: 当然,可以重新启动Java应用程序。 以下方法显示了一种重新启动Java应用程序的方法: 基本上,它执行以下操作: 查找Java可执行文件(我在这里使用了Java二进制文件,但这取决于您的要求) 查找应用程序(在我的情况下是一个ja

  • 我正在运行一个部署在远程机器服务器上的Web应用程序,我有这个应用程序的IP地址和URL。当我用浏览器点击URL时,应用程序会显示。 我现在必须分析这个web应用程序,因为我需要找出为什么它运行得这么慢。 我试过使用JProfiler,但没有成功。有人可以建议如何配置JProfiler进行远程分析吗?