Tomcat的热加载机制是通过Tomcat启动时开启的Watcher线程定期扫描含有WEB-INF/classes或WEB-INF/lib的web应用,检查这些文件的变化情况,从而决定是否需要重新加载某个应用程序。
具体来说,Watcher线程监控的文件包括:
- WEB-INF/classes目录下的所有.class文件
- WEB-INF/lib目录下的所有.jar文件
对于这些文件,Watcher会维护它们的lastModified时间戳,并定期地检查它们是否被修改。如果发现lastModified时间戳发生了变化,即文件被修改了,Watcher线程将向Tomcat的容器发出消息,告知其需要重新加载应用程序,并重新加载相应的类。
值得注意的是,Tomcat服务器配置文件server.xml中可以配置autoDeploy和reloadable两个属性,它们都与热加载相关。其中autoDeploy默认为true,表示当Tomcat检测到应用程序包(即war文件)发生变化时,自动部署新的应用程序包。而reloadable默认为false,表示是否启用自动重载(即热加载)机制。如果需要启用热加载,则应将reloadable设置为true。
总的来说,Tomcat的热加载机制是根据文件的lastModified时间戳来判断文件是否发生变化的。