最近,我正在阅读有关具有热部署功能的Erlang的书。可以在不降低系统的情况下完成部署。所有现有请求都将由旧版本的代码处理,部署后的所有新请求将由新代码提供。在这些情况下,两个版本的代码在运行时可用,直到所有旧请求都被提供。在Java中有什么方法可以保留2个版本的jar文件吗?是否有任何app / web服务器支持此功能?
答案 0 :(得分:4)
如果您的目的是加快开发速度,那么JRebel就是这个目的的工具。但是,我不建议使用它来修补生产系统。
JRebel会在类文件发生更改时检测到并将其重新加载到正在运行的应用程序服务器中,而不会丢弃任何旧状态。与大多数应用程序服务器重新部署完整初始化过程必须重新运行的整个war / ear时相比,这要快得多。
答案 1 :(得分:2)
答案 2 :(得分:1)
在Java世界中有很多方法可以实现热部署,因此您可能需要更具体地了解您的上下文以及您要实现的目标。
以下是一些需要考虑的良好线索/选项:
答案 3 :(得分:1)
从技术上讲,你可以自己做。虽然,我不推荐它,因为它很快就会变得复杂。但这个想法是你可以创建一个ClassLoader并加载你的新版本的类。然后确保执行代码知道新的ClassLoader。
我建议只使用JBoss并重新部署你的罐子和战争。大部分都很简单。
在任何一种情况下,您都要确保没有任何内存泄漏,因为在重新部署后,您将耗尽PermGen空间。
答案 4 :(得分:0)
将RelProxy添加到您的工具箱中,RelProxy是Java(和Groovy)的热类重新加载,即使对于生产也可以改进开发,只有一个显着的限制,只能在代码的子集中重新加载。