进去loader.backgroundProcess();中我们可以看到
public void backgroundProcess() {//此处判断热加载开关是否开启和监控的文件夹中文件是否有修改if (reloadable && modified()) {try {Thread.currentThread().setContextClassLoader(WebappLoader.class.getClassLoader());if (context != null) {//Context重启context.reload();}} finally {if (context != null && context.getLoader() != null) {Thread.currentThread().setContextClassLoader(context.getLoader().getClassLoader());}}}}我们可以发现Tomcat热加载的步骤
- 如果发现有文件发生变化,热加载开关开启
- 关闭Context容器
- 重启Context容器
热部署如果还是不懂热部署是什么的,下面演示一遍应该就明白了 。Tomcat在启动的时候会将其目录下webapp中war包解压后然后封装为一个Context供外部访问 。那么热部署就是在程序运行时,如果我们修改了War包中的东西 。那么Tomcat就会删除之前的War包解压的文件夹,重新解压新的War包 。

文章插图
我们发现上面动图中在Tomcat运行时,我们修改了War包的信息,它就会将原来的删除然后重新生成一份 。
我们从上面的动图中其实就看出了热部署和热加载的区别了 。热部署是将文件夹删除然后重新解压包 。那么热加载是由Context容器负责的 。那么热部署又是由哪个容器负责呢?因为一个文件夹对应一个Context 。既然文件夹都删除了,那么肯定不是由Context容器负责了 。那么应该就是Context的父容器Host来负责 。
我们可以看到Host容器并没有实现自己的backgroundProcess方法 。那么它是如何监听的呢?既然它没有实现方法,肯定是调用了父类的backgroundProcess方法 。我们可以看到在父类的backgroundProcess中
@Overridepublic void backgroundProcess() {. ...........省略fireLifecycleEvent(Lifecycle.PERIODIC_EVENT, null);}可以看到周期事件的监听器 。而Host的事件监听器是HostConfig类的lifecycleEvent方法@Overridepublic void lifecycleEvent(LifecycleEvent event) {if (event.getType().equals(Lifecycle.PERIODIC_EVENT)) {// 周期事件check();} else if (event.getType().equals(Lifecycle.BEFORE_START_EVENT)) {// 开始之前事件beforeStart();} else if (event.getType().equals(Lifecycle.START_EVENT)) { // 开始事件start();} else if (event.getType().equals(Lifecycle.STOP_EVENT)) { // 结束事件stop();}}我们可以看check方法protected void check() {if (host.getAutoDeploy()) {// 检查Host下所有已经部署的web应用DeployedApplication[] apps =deployed.values().toArray(new DeployedApplication[0]);for (int i = 0; i < apps.length; i++) {if (!isServiced(apps[i].name))checkResources(apps[i], false);}// 检查Web应用是否有变化if (host.getUndeployOldVersions()) {checkUndeploy();}// 执行部署deployApps();}}复制代码热部署的步骤其实也可以简化为三步骤- 检查Host管理下的所有web应用
- 如果原来的Web应用被删除,就将相应Context容器删除
- 如果有新War包放进来,就部署相应的War包
作者 | 不学无数的程序员
来源 | https://urlify.cn/Ir6Z7n
【热加载和热部署,没听过?看看 Tomcat 是怎么实现的】
推荐阅读
- 绿茶和柠檬的功效,柠檬绿茶的做法
- 白毫银针和白牡丹区别,白毫银针十不采
- 白茶的产地和历史,安吉白茶产地环境
- CSS3伪类:valid和:invalid实现表单校验
- 软件是怎样控制硬件的?
- windows10休眠和睡眠的区别-windows的睡眠和休眠的区别-
- 家里就一台电脑,我和儿子都想用,用ASTER软件可以暂时解决
- 比伽马射线暴威力更大的宇宙现象 太阳系中最热的星球
- 外星人真实存在,还和美国达成了协议 专家称美国与外星人有协议
- 《和女民警的浪漫故事》?女民警美篇
