spring-boot-devtools功能介绍
maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>xxx</version>
</dependency>
主要包括:
- 本地class文件热部署(默认启用)
- 本地静态文件实时生效(默认启用,需要在Chrome浏览器安装LiveReload插件支持)
- 远程服务器热部署
热部署启用成功!!!!
ClassLoader结构图
热部署实现原理
描述:
- 使用RestartClassLoader加载target/classes下文件,不监听第三方依赖包,加快启动速度。
- 使用FileSystemWatcher异步监控文件修改
- 监听到文件修改时,创建新的RestartClassLoader
注意:基本所有框架的热部署原理都相差不大都是在ClassLoader上面做文章,通过重新创建ClassLoader废弃旧的ClassLoader来达到重新加载新class文件的效果
相关技术点-Spring事件委托模型
相关技术点-SpringSPI机制
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。详细可自行百度JAVA SPI机制及Dubbo SPI机制。
Spring SPI机制主要实现逻辑位于SpringFactoriesLoader。
相关spring.factories文件例子如下:
相关技术点-Thread join实现线程顺序执行
程序修改重新装载时,通过创建新的线程进行装载,此时主线程需要等待子线程结束,
监控整个relaunch过程是否正常,若正常则结束主线程,若异常则打印异常日志,结束主线程。通过join方法阻塞线程,类似于Future功能