如何安全地升级 Java 软件?

如何安全地升级 Java 软件?

我运行一个大部分时间都很忙的 Java 应用程序。当我需要升级它时,我会向它发送一条消息,让它在下一次可用机会时干净退出,然后升级类文件,然后重新启动它。我真正想做的是升级类文件,然后让程序在下一次好机会时启动,但我发现(这是 solaris)如果在程序运行时修改磁盘上的文件,有时会发生不好的事情。我推测是因为并非所有类文件都始终存在于 jvm 中,所以有时它必须从磁盘重新加载,或者 solaris 可能正在从磁盘加载与旧二进制文件不匹配的文件部分。我也看到它对 C 二进制文件这样做。有什么建议吗?进行移动和复制是否更安全,这样相同的磁盘信息不会被覆盖,但会为新文件创建一个新的 inode?

答案1

还可以考虑使用 webstart(有额外的限制)自动升级或将更新集成到启动脚本中,例如:1. 检查 new/ 中是否有任何文件,将它们复制到生产中 2. 启动应用程序

这样,您只需重新启动即可。然后您可以复制、rsync、ftp……

答案2

覆盖 jar/classes 不起作用。原因很简单:您可以将一个类加载到内存中,然后由于内存压力而卸载,然后再次重新加载。如果您更改底层类文件,您将得到一个带有旧系统的新类,这会带来麻烦。

最好的选择是在应用程序中构建热部署(或让开发人员构建它),使用以下解决方案:

  • 自定义类加载;
  • 操作系统GI;

或任何最适合您的。

相关内容