写点什么

SpringBoot 之如何实现热部署|超级详细,建议收藏

作者:bug菌
  • 2023-04-23
    江苏
  • 本文字数:2062 字

    阅读完需:约 7 分钟

SpringBoot之如何实现热部署|超级详细,建议收藏

👨‍🎓作者:bug 菌

✏️博客:CSDN、掘金、infoQ、51CTO 等

🎉简介:CSDN 博客专家,C 站历届博客之星 Top50,掘金/InfoQ/51CTO 等社区优质创作者,全网粉丝合计 10w+,对一切技术感兴趣,重心偏 Java 方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。

..

✍️温馨提醒:本文字数:1999 字, 阅读完需:约 5 分钟

        如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章点亮👍,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连(收藏+关注+留言)就是对 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!让所有配置都生效。

再次,若想验证热部署是否生效,你们可以做个简单测试(比如随便修改个接口地址啥的,然后用新接口地址去访问,验证修改代码是否在不手动启动项目的情况下生效等),我这里就不给大家演示了。

同时,如下是我从网上看到的一些注意事项,经实测确实如此,也希望大家在使用热部署的同时,也能少走些弯路。

具体如下:

  1. package 打包时,不包含 devtools 工具。

  2. 生产环境 devtools 将被禁用,如 java -jar 方式或者自定义的类加载器等都会识别为生产环境。

  3. devtools 会在 windows 资源管理器占用 java 进程,在开发工具里面杀不掉,只能手动 kill 掉,不然重启会选成端口被占用情况。

  4. Thymeleaf 无需配置 spring.thymeleaf.cache: false,devtools 默认会自动设置。

... ...

        ok,以上就是我这期的全部内容啦,如果还想学习更多,可以看看我的往期热文推荐哦,不积跬步,无以至千里; 不积小流,无以成江海,一口吃不成一个大胖子,加油!咱们下期拜拜~~

文末🔥

        我是 bug 菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!


感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。

时刻警醒自己:

抱怨没有用,一切靠自己;

想要过更好的生活,那就要逼着自己变的更强,生活加油!!!


发布于: 刚刚阅读数: 2
用户头像

bug菌

关注

公众号 | 猿圈奇妙屋 2020-07-30 加入

CSDN/阿里云/51CTO博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核公众号「猿圈奇妙屋」,欢迎你的加入!免费领取海量资料。

评论

发布
暂无评论
SpringBoot之如何实现热部署|超级详细,建议收藏_Spring Boot_bug菌_InfoQ写作社区