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

热部署在内部如何工作?

陈哲
2023-03-14
问题内容

我正在使用Eclipse服务器功能进行热代码部署。使用tomcat作为Web服务器。但是我不确定它是如何工作的。我有自己的理解,它必须如何在内部工作。

我的理解:- 当开发人员更改代码(例如,类Employee)时,Eclipse将在正确的位置(必须是特定的Web
/应用服务器,将其称为热部署目录(HDD))放置/发布修改后的已编译类。
。现在将显示Web服务器特定的类加载器。它在HDD下找到新条目。现在,它查找classloader是否已在perm
gen空间中加载了类,Web服务器将从permgen空间中将其卸载,并在内部重新加载了新的类,而无需服务器重新启动,从而反映了新的更改(字节码)。作为重新加载的一部分,Web服务器还将在perm
gen空间中将现有的Epmloyee对象与新的类定义链接起来,以便反映出新的变化。

我的理解正确吗?

像这样的一些链接说Eclipse热部署只是重新部署的自动化。我认为这意味着eclipse会自动停止服务器,重新发布并重新启动它,而无需开发人员干预。
但是,我认为这不是正确的,因为与启动/发布/重新启动相比,此过程确实非常快。
同样,如果情况确实如此,则会话和其他活动对象在重启后将如何保持活动状态?
也许这个链接在过去是正确的,但现在不是,因为我发现jar中类的热部署工作也可以


问题答案:

热代码部署取决于运行时功能。您链接到的答案并不意味着自动停止服务器部署新代码并再次启动服务器。这本来是浪费的。

相反,大多数Java应用程序服务器都可以 重新部署
该应用程序。这意味着服务器将创建一个新的Web应用程序类加载器,通过该新类加载器加载应用程序的新版本,在某些情况下,它将迁移状态(对HTTP会话进行序列化/反序列化),并删除旧版本的应用程序。

现在,重新部署的速度在很大程度上取决于应用程序本身-应用程序的初始化方式。是否需要预热缓存?是否必须满足依赖关系(a-las
Spring,CDI)?是否必须初始化Hibernate SessionFactory?涉及许多因素。

Eclipse WTP自然要做的就是它可以触发应用程序容器的重新部署过程,仅此而已。当然,小型应用程序不会花很长时间重新部署。

除非有特殊的运行时技术/容器/框架,并且没有为Eclipse开发的特殊连接器要利用钩子来触发针对该特定技术更新的热代码。一个很好的例子是OSGi运行时的bndtools。

只是为了消除一些混乱:

人们常常将
HotSwap
热部署
混为一谈。第一个是HotSwap,它是JVM在运行时更新类定义的功能。后一种是热部署,它是应用程序服务器自动或不增量地部署应用程序的能力,而无需重新启动JVM进程。

所以我的回答是关于热部署,而不是关于HotSwap。因此,我将热部署称为平台的“自动化”,而不是其基本机制。



 类似资料:
  • 应用更新部署无需reload或者restarthi-nginx。hi-nginx-java能根据全局配置 route { lrucache { reflect { expires = 300 size = 1024 } } } 自动实现热更新。关键值由"route.lrucache.reflect.e

  • 问题内容: 我正在阅读有关Java中并发性的Oracle官方文档,但我想知道返回的返回值之间可能有什么区别? 并使用例如 。我假设我用一个。我知道,一般而言,同步集合对于我来说只是一个装饰器,因此很明显a 的内部结构有所不同。您是否有关于这些实施细节的信息? 编辑:我意识到源代码是公开可用的: ConcurrentHashMap.java 问题答案: 我会阅读ConcurrentHashMap的源

  • IntelliJ和Tomcat是否可以这样配置:当我保存类上的更改时,该类会被重新编译并部署到Tomcat,以便在我重新启动应用程序时可以看到更改? 这是可能的还是我需要使用像JRebel这样的工具? 我使用的是Intellij12.1.4

  • 在Eclipse中,我创建了Tomcat服务器,并将我的应用程序添加到参考资料中。JSP、JS、CSS和JAVA类hot deploy就是这样工作的。 在IntelliJ中,我配置了Tomcat8服务器。在Deployment选项卡中,我添加了我启用了对,还启用了。JSP、JS、CSS热交换就是这样工作的。Java类不是。 我还检查了 我知道我可以使用JRebel,但是在Eclipse中hot d

  • 本文向大家介绍SpringBoot如何通过devtools实现热部署,包括了SpringBoot如何通过devtools实现热部署的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringBoot如何通过devtools实现热部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在项目的pom.xml文件添加如下两段 如果使用的是In

  • 我有一个web应用程序部署为使用Wildfly的爆炸战争。我想要得到的是 null 目前,我所处的情况是,我可以选择其中一个或另一个,但不能同时获得这两个选项(这意味着,要么每个jsp更改都强制进行新的部署,要么.class文件不强制进行新的部署)。 wildfly的当前配置(使用版本8.1.0)为 此外,我还发现,无论我在deployment-scanner配置中设置了什么,一旦服务器启动并运行