SpringBoot Developer Tools与热部署

@TOC

参考:
https://zhuanlan.zhihu.com/p/133233569
https://blog.csdn.net/yaomingyang/article/details/78241988

在Spring Boot项目中,Spring Boot官方提供了免费的Devtools热部署模块,通过maven的方式导入就能使用。根据官方描述,Spring Boot Devtools插件使用了两种类加载器来加载资源:对于第三方的jar包使用base classloader来加载,这类资源一般比较固定,不会发生改动;而对于项目中的经常需要变动的代码类则使用restart classloader来加载。

maven依赖

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

配置

如果你使用Idea创建项目,选择使用Spring Boot Initializer创建可以在依赖选择面板中的Developer Tools勾选“Spring Boot DevTools”一项(如果你创建的是一个简单的maven项目,需要手动在pom文件中导入):
在这里插入图片描述

依赖我们已经导入了,但是如果直接启动项目可能会遇到热部署不生效的问题,在Intellij Idea下,还需要手动进行一些设置。首先到Files→Settings→Build,Extension,Deployment→Compiler,将Build project automatically一项勾选(如果你更喜欢手动每次手动Rebuild项目可不勾选):
在这里插入图片描述

连击两次Shift键,输入Registry后找到Registry…回车,直接输入running找到complier.automake.allow.when.app.running并勾选即可,最后重启一下项目,之后对项目代码的任何更改都将被侦知并自动重新加载,无需手动重启项目(这个过程可能有数秒的延迟)。
在这里插入图片描述

在构建的Spring Boot项目中,我们无需手动指定spring.devtools.livereload.enabled=true因为在Spring Boot2.x的版本中是默认开启了热部署的,当然每个版本都有可能变化,你可以在配置文件中显式指定它;如果你还是用了页面模板引擎Thymeleaf,还需要在properties配置文件中设置spring.thymeleaf.cache=false关闭对Thymeleaf页面的缓存才能做到页面的及时刷新。

对于resources目录下的HTML,CSS等静态资源的增加、修改不会导致应用重启(DevTools自动触发的),只有对Java类文件的增加、修改DevTools才会自动重启应用。当然耗时比我们手动重启是大大缩短的,一般耗时都在1~2秒之内。

资源的重新加载发生在文件保存修改之后,由于Idea的自动文件保存机制,这个操作往往在手动ctrl+s或切换窗口数秒之后自动触发。

使用热部署可能会出现的问题

在使用spring-boot-devtools插件的时候,还可能会遇到往resources目录下添加静态资源如图片时,Idea能够正确识别到资源文件的路径,但是到浏览器中直接访问时却会报一个“404资源未找到”的的错误:
在这里插入图片描述

为什么会出现这样的错误?首先资源路径肯定是正确的,要想知道缘由我们可以到target目录下寻找答案。我们应该知道target目录是项目源码和相关资源编译后的存储目录,实际上实际上所有静态资源的访问都是从target下面找的,而并不是我们项目中的resources目录下:
在这里插入图片描述

通过上面已经能够说明问题了,此时我们可以点击选择导航栏上的Build→Rebuild Project,这样就能把变动的资源文件同步到服务器,重新通过浏览器访问资源,发现已经能够正常访问了。其实这个问题并非经常性的,但是确实会有概率出现这种情况,所以如果以后出现资源访问的情况,在确保路径无误的前提下,可以先Rebuild一下项目,不行再看看是否是其他问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值