Java-热部署

Siv*_*lam 5 java erlang hotdeploy

最近,我在读关于Erlang的书,它具有热部署功能。可以在不关闭系统的情况下完成部署。所有现有请求将由旧版本代码处理,部署后所有新请求将由新代码处理。在这种情况下,这两个版本的代码在运行时都可用一段时间,直到所有旧请求都得到满足。Java 中是否有任何方法可以保留 2 个版本的 jar 文件?有没有任何应用程序/网络服务器支持这个?

mih*_*nus 5

如果您的目的是加快开发速度,那么JRebel就是用于此目的的工具。不过,我不建议使用它来修补生产系统。

JRebel 会检测类文件何时发生更改,并将其重新加载到正在运行的应用程序服务器中,而不会丢弃任何旧状态。与大多数应用程序服务器在重新部署整个 war/ear 时所做的速度要快得多,其中整个初始化过程必须重新运行。


mik*_*era 2

在 Java 世界中实现热部署的方法有很多,因此您可能需要更具体地了解您的上下文以及您想要实现的目标。

以下是一些值得考虑的好线索/选项:

  • OSGi是一个支持热部署的通用模块系统
  • Clojure是一种动态 JVM 语言,可实现大量运行时交互性。Clojure 通常用于“实时编码”——几乎任何东西都可以在运行时热交换和重新定义。Clojure 是一种函数式语言,非常强调不变性和并发性,因此在某些方面与 Erlang 有一些有趣的相似之处。Clojure 有一些非常好的 Web 框架,例如Noir,它们适合热交换 Web 服务器代码。
  • Play框架旨在出于生产力原因启用热交换代码(避免 Web 服务器重新启动)。如果您主要关注热插拔 Web 应用程序,可能会相关。
  • 大多数 Java 应用服务器(例如JBoss)都支持某种形式的 Web 应用程序热插拔。