当前位置: 首页 > news >正文

乐东黎族自治县网站建设_网站建设公司_SSL证书_seo优化

联通的网站是谁做的,php 开源cms 企业网站,wordpress 链接新窗口打开,网站地图表现形式今天咱们来聊聊这个热部署神器 spring-boot-devtools 的运行原理#xff0c;看看它是怎么用这个 ClassLoader 来实现快速重启#xff0c;帮我们节省时间的#xff01;#x1f61d;文章概要文章的主旋律如下#x1f447;spring.factories我们直接打开 spring-boot-devtool… 今天咱们来聊聊这个热部署神器 spring-boot-devtools 的运行原理看看它是怎么用这个 ClassLoader  来实现快速重启帮我们节省时间的文章概要文章的主旋律如下spring.factories我们直接打开 spring-boot-devtools 源码 找到 spring.factories 文件我们一般都本地开发调试的所以就直接看这个 LocalDevToolsAutoConfiguration 类啦LocalDevToolsAutoConfiguration可以看到核心点在 重启和重载 主角我们先来看看这个 重启 中有什么叭重启原理介绍大概这么一个思路 下面就跟着源码分析啦文末有源码重启要点流程图RestartConfiguration有这么些方法从名字上分析这两个方法应该是重点逻辑上应该是 有一个 watcher 在盯着 classpath 如果有变动的话就触发这个 ClassPathChangedEvent 事件 那么看看这个 watcher 叭 ClassPathFileSystemWatcher可以看到这里就创建了这个 ClassPathFileSystemWatcher 类 这里我们注意到它实现了三个接口经过前面 Spring 文章的学习咱们知道第一步就该看啥了根据类的初始化先看看有 static 相关的代码没接着看 构造器 最后就来到这个初始化方法 afterPropertiesSet 啦这里没有 static 方法构造器也很简单就是获取 FileSystemWatcherFactory  ClassPathRestartStrategy 和 监视的文件路径那么就看看 afterPropertiesSet 写了什么叭 ClassPathFileChangeListener这个也不复杂就监听到文件改变后发布事件 ClassPathChangedEventFileSystemWatcher接着就是这个 start 方法啦很明显就是开启一个线程那么咱们来看看线程中到底在 run 什么找到这个任务类 Watcher 可以发现它的任务就是一直 scan pollInterval 默认是 1s quietPeriod 默认是 0.4s意思是每次轮询的时间是 1s 包含中间休息的 0.4s 休息事件是来确认文件在这个期间没有再次被改动。改动了的话会回调 FileChangeListener 的 onChange 对应我们上面的这个 ClassPathFileChangeListener 会去发布事件 ClassPathChangedEvent ApplicationListener绕了一大圈终于描述完了这个监视器 ClassPathFileSystemWatcher 同时我们也得把目光移到这个RestartConfiguration 的第二个核心 监听器 如图所示这个方法的作用就是重启应用 restart重启应用重启的过程中呢包括两个步骤第一步 stop 第二步 startstop 部分就是毁灭这些东西了这里也藏了很多细节有很多并发相关的知识点 比如一. ReentrantLock  是写在 try catch 的里面还是外面二. 循环里的 rootContexts 其实是 CopyOnWriteArrayList 类型的三. 通过强制的 OOM 来清除所有的 软/弱引用 ( 还有这种操作的)在 start 的过程中是通过创建这个重启线程 RestartLauncher 来实现的可以发现该类的任务就是找到 mainclass 并调用 main 方法完成重启。而在这个过程中就涉及到这个 classloader 啦。ClassLoader细心的小伙伴可以发现上面这行代码中调用到了这个 ClassLoader 这个 getContextClassLoader() 是属于 Thread 类的通过它可以获取到当前线程上下文的 ClassLoader 。Class.forName(this.mainClassName, false, getContextClassLoader());在创建这个 RestartLauncher 线程时就已经将咱们这个 RestartClassLoader  给传进来了。重启时就直接通过 RestartClassLoader  去找到 main 方法完成重启。很明显这里 破坏了双亲委派机制先从自身查找没有的话再去父类查找这里 业务代码 都被 RestartClassLoader 加载了而每次重启都会重新创建这个 RestartClassLoader  然后去加载业务代码 通过传进来的 URL  可以发现那么到此这个 重启 的过程就完成了。差点忘了这里还有个默认的监视范围监视策略如下图 默认策略中这些路径下的文件变化不被检测image-20210920230435492可通过配置修改spring.devtools.restart.excludestatic/**,public/**总结通过阅读源码我们知道了 spring-boot-devtools 是通过自定义 RestartClassLoader  来加载业务代码并在重启时销毁它再重新创建进而重新获取代码实现这个快速重启的。而其他 jar 包等由另外的 ClassLoader  加载不受影响。同时也可以看到 Spring 事件机制 无处不在的身影还有各种初始化的操作以及线程并发锁在重启过程中的使用这些就需要小伙伴们打开源码自身感受了如 守护线程ReentrantLock CopyOnWriteArrayList CountDownLatch 甚至 OOM 都能这么用还有 重启 原来就是 反射调用 main 方法 呀重启过程源码要点本文就分享到这里啦喜欢的朋友点个赞再走哦往期推荐Spring 事务失效的 8 种场景实战实现幂等的8种方案绝绝子画框架图就用这个工具
http://www.ihoyoo.com/news/82515.html

相关文章:

  • 杭州品牌网站建设公司佛山市seo推广哪家好
  • 什么网站ppt做的最好看wordpress设置自动登陆
  • 个体工商户是否能够做网站河南那家做网站实力强
  • 网站程序问题设计建筑
  • 网站建设实训室长春seo搜索排名
  • it培训网站模板网站建设与管理基础及实训
  • 商务网站建设是什么响应式布局网站开发
  • 建筑网站开发青岛代理记账
  • 廊坊网站制作建设网站后台图片不显示
  • 龙岩做网站的游戏推广论坛
  • 怎样帮拍卖网站做策划三台网站建设哪家专业
  • 医药网站文案编辑是怎么做的乔拓云智能建站平台
  • 徐州集团网站建设流程wordpress 怎么传递参数 get参数
  • 保定网站建设多少钱哪家好wordpress自定义链接不能用
  • 南阳做网站公司电话c 网站建设步骤
  • 成都建设网站哪家好网站开发程序员是做什么的
  • 有做soho网站的吗平台企业
  • 成都网站建设蜀美网络高中文凭能学做网站吗
  • 建立网站原则加网络网站建设工作室
  • 米拓cms可以做企业网站吗嘉禾县网站建设推广公司
  • 苏州做网站最好公司没网站怎么做二维码扫描连接
  • 常州如何进行网站推广网站开发和企业级开发有什么区别
  • dedecms 关闭网站昆明网站建设手机版
  • 遵义网站建设找工作开源免费企业网站源码
  • 网站设计参考网站创建网站花钱吗
  • 网站备案进度查询网站编程代码
  • 西宁网站建设王道下拉惠网页编辑按键
  • 领卷网站如何做代理无做a视频网站
  • 衡阳网站建设怎样收费小型手机网站建设推荐
  • 云尚网络科技有限公司网站建设海南企业seo推广