SpringBoot热部署原理(二)

系列文章

SpringBoot热部署流程(一)

SpringBoot热部署原理(二)

目录

前言

原理

实践

更新代码触发重启

类加载器的不同

其他


前言

前面对SpringBoot热部署的流程和使用方式做了一个简单的介绍,这里对SpringBoot热部署原理做一个分析以及它的好处

原理

  • (官网描述)spring-boot-devtools  这个插件监视本地的代码路径信息,只要有更新,就会触发重启

  • 重启的过程通过两个不同的类加载器来区分,一个是基本的 ClassLoader ,另一个是 RestartClassLoader ClassLoader(实际上是子类 AppClassLoader ) 主要是用于第三方等jar的加载,RestartClassLoader 主要是用于本地代码类的加载,这个 RestartClassLoader 就是 spring-boot-devtools 引入的类加载器 

实践

针对上面官网的介绍,来实操一下,验证热部署是否是这样工作的呢

更新代码触发重启

  • 要测试热部署下的启动模式,就需要在启动的过程干事儿,这里先应用@PostConstruct 注解
// 让当前类被扫描到
@Component
public class MyConfig {

    //类的生命周期中干事情
    @PostConstruct
    public void config() {
        System.out.println("修改前");
    }
}
  • 启动项目,记录当前的类Class修改时间

  • 修改文字 修改前—> 修改后,再观察当前类Class的修改时间

  •   当前类被重新编译,控制台不久输出重启日志,验证成功

类加载器的不同

  • 多点代码,打印出不同的类(主要是本地和第三方)的类加载器
// 让当前类被扫描到
@Component
public class MyConfig {

    //类的生命周期中干事情
    @PostConstruct
    public void config() {
        System.out.println("修改前");
        System.out.println("Local "+MyConfig.class.getClassLoader());
        System.out.println("Other "+ DispatcherServlet.class.getClassLoader());
    }
}
  • 启动项目,查看日志输出

  • 通过日志能发现,本地的是 RestartClassLoader,第三方的是ClassLoader的子类 AppClassLoader,说明热部署下的类加载器的不同

 

其他

其实深入一点儿的话,还可以看看热部署的实现原理,例如:热部署是怎样监听到文件更新而重启

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值