Tomcat实现热部署、热加载原理解析

本文详细解析了Tomcat如何实现热部署和热加载。通过ContainerBase的backgroundProcess方法,Tomcat启动后台线程,处理各个容器组件的周期性任务。Context容器的backgroundProcess方法用于检查并处理类文件更新,实现热加载。热部署则会重新加载整个Web应用,清空Session。文章还分享了作者的面试经验和Java学习资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若有变化,就重新加载类,在这个过程中不会清空Session ,一般用在开发环境。

热部署


类似地,也由后台线程定时检测Web应用变化,但它会重新加载整个Web应用。这会清空Session,比热加载更干净、彻底,一般用在生产环境。

Tomcat实现热加载、热部署

==============================================================================

Tomcat通过开启后台线程,使得各个层次的容器组件都有机会完成一些周期性任务。

实际开发往往也需要执行一些周期性任务,比如监控程序周期性拉取系统健康状态。

Tomcat后台线程


开启后台线程做周期性任务,最常见的就是线程池的ScheduledThreadPoolExecutor,没错,Tomcat就是通过它来开启后台线程:

backgroundProcessorFuture = Container.getService(this).getServer().getUtilityExecutor()

.scheduleWithFixedDelay(

// 要周期性执行的Runnable

new ContainerBackgroundProcessor(),

//第一次执行延迟多久

backgroundProcessorDelay,

// 之后每次执行间隔多久

backgroundProcessorDelay,

// 时间单位

TimeUnit.SECONDS);

任务类ContainerBackgroundProcessor是ContainerBase的内部类,ContainerBase是所有容器组件的基类。

ContainerBackgroundProcessor


protected class ContainerBackgroundProcessor implements Runnable {

@Override

public void run() {

// 入参"宿主类"实例

processChildren(ContainerBase.this);

}

protected void pr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值