SpringBoot系列(四十):如何实现热部署|超级详细,建议收藏
Posted bug菌¹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot系列(四十):如何实现热部署|超级详细,建议收藏相关的知识,希望对你有一定的参考价值。
👨🎓作者: bug菌
✏️博客: CSDN、 掘金、 infoQ、 51CTO等
🎉简介:CSDN、 掘金等社区优质创作者,全网合计7w粉+,对一切技术都感兴趣,重心偏Java方向,目前运营公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️ 温馨提醒:本文字数:1314字, 阅读完需:约 5 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮 👍吧,您的点赞三连( 收藏 ⭐ +关注 👨🎓 +留言 📃)就是对bug菌我创作道路上最好的鼓励与支持 😘。时光不弃 🏃🏻♀️,创作不停 💕,加油 ☘️
一、前言🔥
环境说明:Windows10+idea2021.3.2+jdk1.8+springboot2.3.1.RELEASE
想必小伙伴在日常开发中,有遇到这么一件事吧,频繁修改一个业务接口,但为了真实测试,必须要通过页面也定位bug,只能改一步重启一次,就需要频繁重启项目,重新部署,对于一个大型项目而言,重启需要很长时间,目前我这项目重启一次将近20秒,要是这种编码效率,那明天去人事处报道的人应该就是我了,于是我就想到,热部署。
对的,没错,热部署可以替我们节省大把花在重启项目本身上的时间。那对于热部署,大家知道的又有多少呢?
热部署原理上,其实是使用了两个ClassLoader,一个ClassLoader加载哪些不会改变的类,另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样对于代码更改的时候,原来的restart ClassLoader会被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相对比较少,所以实现了快速重启。
二、热部署实现方式🔥
传统上,热部署所知道的实现方式有三种,分别如下:
配置pom.xml文件,使用插件的执行命令mvn spring-boot:run启动项目。
使用springloader本地启动修改jvm参数;-javaagent:<jar包地址> -noverify(未实测)
使用devtools工具包,操作简单。
这里主要讲一下第三种方式,也是我所推荐的,因为配置及使用相对简单。我们都知道,热部署也不是万能的,对于某些更改,其实热部署也无法自动重启,还是需要重启,但是针对代码修改而进行自动重启部署,这绝对是美事一件。
接下来我就带着大家配置一下如何在自己的项目中配置热部署。
三、devtools配置🔥
1、引入devtools依赖
在你的pom.xml配置文件中,引入devtools依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
提示:
设置optional 为true,是避免大家微服务项目父子项目依赖继承冲突。
2、devtools的配置
spring:
devtools:
restart:
enabled: true #设置开启热部署,false即不开启热部署
additional-paths: src/main/java #指定热部署的目录
exclude: test/** #指定目录不更新
3、Intellij Idea修改
如果你是使用的idea开发工具,那你还需要改以下两个地方:
1、勾上自动编译或者手动重新编译
File -> Setting -> Build, Execution, Deployment -> Compiler:勾选 [Build project automatically]
演示截图如下:
2、注册
Shift+Ctrl+Alt+/(Windows快捷键), 单击[Registry],勾选[compiler.automake.allow.when.app.running]
快捷键:Shift+Ctrl+Alt+/ 后,会弹出如下界面:
然后单击 Registry,找到 [compiler.automake.allow.when.app.running]把它勾选上。具体演示如下:
到此,以上就完成了热部署的所有配置啦,你们记得配置完成后,重启idea!让所有配置都生效。
再次,若想验证热部署是否生效,你们可以做个简单测试(比如随便修改个接口地址啥的,然后用新接口地址去访问,验证修改代码是否在不手动启动项目的情况下生效等),我这里就不给大家演示了。
同时,如下是我从网上看到的一些注意事项,经实测确实如此,也希望大家在使用热部署的同时,也能少走些弯路。
具体如下:
package 打包时,不包含devtools工具。
生产环境devtools将被禁用,如java -jar方式或者自定义的类加载器等都会识别为生产环境。
devtools会在windows资源管理器占用java进程,在开发工具里面杀不掉,只能手动kill掉,不然重启会选成端口被占用情况。
Thymeleaf无需配置spring.thymeleaf.cache: false,devtools默认会自动设置。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
四、往期推荐🔥
... ...
五、文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走 👣 出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!
以上是关于SpringBoot系列(四十):如何实现热部署|超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章