spring-boot-devtools功能介绍

maven依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <version>xxx</version>
  5. </dependency>

主要包括:

  • 本地class文件热部署(默认启用)
  • 本地静态文件实时生效(默认启用,需要在Chrome浏览器安装LiveReload插件支持)
  • 远程服务器热部署

image.png
热部署启用成功!!!!

ClassLoader结构图

image.png

热部署实现原理image.png

描述:

  • 使用RestartClassLoader加载target/classes下文件,不监听第三方依赖包,加快启动速度。
  • 使用FileSystemWatcher异步监控文件修改
  • 监听到文件修改时,创建新的RestartClassLoader

注意:基本所有框架的热部署原理都相差不大都是在ClassLoader上面做文章,通过重新创建ClassLoader废弃旧的ClassLoader来达到重新加载新class文件的效果

相关技术点-Spring事件委托模型

image.png

相关技术点-SpringSPI机制

SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。详细可自行百度JAVA SPI机制及Dubbo SPI机制。
Spring SPI机制主要实现逻辑位于SpringFactoriesLoader。
image.png
相关spring.factories文件例子如下:
image.png

相关技术点-Thread join实现线程顺序执行

程序修改重新装载时,通过创建新的线程进行装载,此时主线程需要等待子线程结束,
监控整个relaunch过程是否正常,若正常则结束主线程,若异常则打印异常日志,结束主线程。通过join方法阻塞线程,类似于Future功能
image.png