tomcat如何部署.net程序_Host容器:Tomcat如何实现热部署和热加载?

本文详细介绍了Tomcat的热部署和热加载机制,这两种方式可以在不重启系统的情况下升级Web应用。热加载通过后台线程检测类文件变化并重新加载,保持Session不变,适合开发环境。热部署则会重新加载整个Web应用,清空Session,适用于生产环境。Tomcat利用ScheduledThreadPoolExecutor开启后台线程,实现各个容器的周期性任务。在Context容器中,热加载通过WebappLoader检查类文件更新并reload,而热部署由Host容器的HostConfig监听器实现,检测webapps目录变化,部署或销毁Web应用。
摘要由CSDN通过智能技术生成

9dcbc433787261ae258545bfad8a6930.png

1e261300fbc679b50b4938a7e4e30445.png

从这一期我们开始学习 Tomcat 的容器模块,来聊一聊各容器组件实现的功能,主要有热部署热加载、类加载机制以及 Servlet 规范的实现。最后还会谈到 Spring Boot 是如何与 Web 容器进行交互的。

今天我们首先来看热部署和热加载。要在运行的过程中升级 Web 应用,如果你不想重启系统,实现的方式有两种:热加载和热部署。

那如何实现热部署和热加载呢?它们跟类加载机制有关,具体来说就是:

  • 热加载的实现方式是 Web 容器启动一个后台线程,定期检测类文件的变化,如果有变化,就重新加载类,在这个过程中不会清空 Session ,一般用在开发环境。
  • 热部署原理类似,也是由后台线程定时检测 Web 应用的变化,但它会重新加载整个 Web 应用。这种方式会清空 Session,比热加载更加干净、彻底,一般用在生产环境。

今天我们来学习一下 Tomcat 是如何用后台线程来实现热加载和热部署的。Tomcat 通过开启后台线程,使得各个层次的容器组件都有机会完成一些周期性任务。我们在实际工作中,往往也需要执行一些周期性的任务,比如监控程序周期性拉取系统的健康状态,就可以借鉴这种设计。

Tomcat 的后台线程

要说开启后台线程做周期性的任务,有经验的同学马上会想到线程池中的 ScheduledThreadPoolExecutor,它除了具有线程池的功能,还能够执行周期性的任务。Tomcat 就是通过它来开启后台线程的:

bgFuture = exec.scheduleWithFixedDelay(              new ContainerBackgroundProcessor(),// 要执行的 Runnable              backgroundProcessorDelay, // 第一次执行延迟多久              backgroundProcessorDelay, // 之后每次执行间隔多久              TimeUnit.SECONDS);        // 时间单位复制代码

上面的代码调用了 scheduleWithFixedDelay 方法,传入了四个参数,第一个参数就是要周期性执行的任务类 ContainerBackgroundProcessor,它是一个 Runnable,同时也是 ContainerBase 的内部类,ContainerBase 是所有容器组件的基类,我们来回忆一下容器组件有哪些,有 Engine、Host、Context 和 Wrapper 等,它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值