Spring Boot 修改静态资源必定要重启项目才会生效吗?未必!

回顾热部署

Spring Boot 中的热部署相信你们都用过吧,只须要添加 spring-boot-devtools 依赖就能够轻松实现热部署。Spring Boot 中热部署最最关键的原理就是两个不一样的 classloader:html

  • base classloader
  • restart classloader

其中 base classloader 用来加载那些不会变化的类,例如各类第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你本身写的代码。Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另外一个新的 restart classloader 代替。在整个过程当中,由于只从新加载了变化的类,因此启动速度要被重启快。spring

可是有另一个问题,就是静态资源文件!使用 devtools ,默认状况下当静态资源发生变化时,并不会触发项目重启。虽然咱们能够经过配置解决这一问题,可是没有必要!由于静态资源文件发生变化后不须要编译,按理说保存后刷新下就能够访问到了。后端

那么如何才能实现静态资源变化后,不编译就能自动刷新呢? LiveReload 能够帮助咱们实现这一功能!浏览器

LiveReload

devtools 中默认嵌入了 LiveReload 服务器,利用 LiveReload 能够实现静态文件的热部署,LiveReload 能够在资源发生变化时自动触发浏览器更新,LiveReload 支持 Chrome、Firefox 以及 Safari 。以 Chrome 为例,在 Chrome 应用商店搜索 LiveReload ,结果以下图:服务器

将第一个搜索结果添加到 Chrome 中,添加成功后,在 Chrome 右上角有一个 LiveReload 图标app

在浏览器中打开项目的页面,而后点击浏览器右上角的 LiveReload 按钮,打开 LiveReload 链接。前后端分离

注意:spring-boot

LiveReload 是和浏览器选项卡绑定在一块儿的,在哪一个选项卡中打开了 LiveReload,就在哪一个选项卡中访问页面,这样才有效果。微服务

打开 LiveReload 以后,咱们启动一个加了 devtools 依赖的 Spring Boot 项目:spa

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

此时随便在 resources/static 目录下添加一个静态 html 页面,而后启动 Spring Boot 项目,在打开了 LiveReload 的选项卡中访问 html 页面

访问成功后,咱们再去手动修改 html 页面代码,修改为功后,回到浏览器,不用作任何操做,就会发现浏览器自动刷新了,页面已经更新了。

整个过程当中,个人 Spring Boot 项目并无重启。

若是开发者安装而且启动了 LiveReload 插件,同时也添加了 devtools 依赖,可是却并不想当静态页面发生变化时浏览器自动刷新,那么能够在 application.properties 中添加以下代码进行配置:

spring.devtools.livereload.enabled=false

最佳实践

建议开发者使用 LiveReload 策略而不是项目重启策略来实现静态资源的动态加载,由于项目重启所耗费时间通常来讲要超过使用LiveReload 所耗费的时间。

Firefox 也能够安装 LiveReload 插件,装好以后和 Chrome 用法基本一致,这里再也不赘述。

关注公众号【江南一点雨】,专一于 Spring Boot+微服务以及先后端分离等全栈技术,按期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货!

原文出处:https://www.cnblogs.com/lenve/p/11325041.html

相关文章
相关标签/搜索