赞
踩
从这一期我们开始学习 Tomcat 的容器模块,来聊一聊各容器组件实现的功能,主要有热部署热加载、类加载机制以及 Servlet 规范的实现。最后还会谈到 Spring Boot 是如何与 Web 容器进行交互的。
今天我们首先来看热部署和热加载。要在运行的过程中升级 Web 应用,如果你不想重启系统,实现的方式有两种:热加载和热部署。
那如何实现热部署和热加载呢?它们跟类加载机制有关,具体来说就是:
今天我们来学习一下 Tomcat 是如何用后台线程来实现热加载和热部署的。Tomcat 通过开启后台线程,使得各个层次的容器组件都有机会完成一些周期性任务。我们在实际工作中,往往也需要执行一些周期性的任务,比如监控程序周期性拉取系统的健康状态,就可以借鉴这种设计。
要说开启后台线程做周期性的任务,有经验的同学马上会想到线程池中的 ScheduledThreadPoolExecutor,它除了具有线程池的功能,还能够执行周期性的任务。Tomcat 就是通过它来开启后台线程的:
bgFuture = exec.scheduleWithFixedDelay( new ContainerBackgroundProcessor(),// 要执行的 Runnable backgroundProcessorDelay, // 第一次执行延迟多久 backgroundProcessorDelay, // 之后每次执行间隔多久 TimeUnit.SECONDS); // 时间单位复制代码
上面的代码调用了 scheduleWithFixedDelay 方法,传入了四个参数,第一个参数就是要周期性执行的任务类 ContainerBackgroundProcessor,它是一个 Runnable,同时也是 ContainerBase 的内部类,ContainerBase 是所有容器组件的基类,我们来回忆一下容器组件有哪些,有 Engine、Host、Context 和 Wrapper 等,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。