java 热部署

第一种方案:重新加载整个项目的示例:如Tomcat、Jetty;默认都是定期检测class文件是否有修改,如果有,先卸载当前容器,再重新加载整个项目。

tomcat 热部署只需要在Host context 配置下reloadable=true

jetty热部署需要搭配插件, jetty-maven-plugin或run-jetty-run


第二种方案:HotSpot虚拟机的HotSwap 不支持类更改,只需在ide开启debug即可

                       HotSwap补丁dcevm(http://ssw.jku.at/dcevm/binaries/)

第三种方案:java agent + Instrumentation 有如下产品:

      jrebel(http://zeroturnaround.com/software/jrebel/)

                        spring-loaded(https://github.com/spring-projects/spring-loaded)

                        fakereplace( https://github.com/fakereplace/fakereplace)

使用jetty+jrebel需要注意这么一个问题,由于jetty支持virtualhost,故在jetty配置了多个项目,假如两个项目出现了包名,类名,方法名一致的时候,前端请求只会访问先配置的方法,这是由于jrebel并不是修改原类,而是新增一个类来指向原类,可能也是jrebel一个没完善的地方。

第四种方案:osgi
期待以后的jdk能解决热部署问题

你可能感兴趣的:(java)