【保姆级】IDEA SpringBoot热部署及遇到的坑

  • Post author:
  • Post category:其他




前言

作为一个小白,在开始做SpringBoot项目时,每次手动修改一点点地方都需要手动重启,真是又费时又费力。于是开始研究SpringBoot的热部署,中间遇到些问题,自己研究了很久大概明白了一些(百度下来全都是千篇一律,也真是不想吐槽了),有不正确的地方欢迎指正。



概念(遇到的坑)

在进入教程前,我觉得有必要先了解一些概念的东西,不然会让我们对后面的热部署产生误解(别说了,我就是)



触发机制

可能很多人像我一样,配置的时候度娘基本都是

热部署XXX自动更新

之内的字眼,让我们误以为热部署配置完成后就全自动的部署。

经过我多次的测试,热部署触发是在文件保存之后。



IDEA自动保存不会触发热部署?

在IDEA配置完SpringBoot热部署之后,为什么不会自动触发?或者时而触发,时而不触发?

那是因为IDEA的默认配置中,保存操作是在从IDEA切换到其他应用时保存。

如果想更频繁的保存,可以勾选第三项,并设置一个时间。eg:当应用程序空闲1秒后保存文件。

在这里插入图片描述



热部署与热加载

热部署与热加载都可以实现不重启服务器编译、部署项目,但他们的区别如下:

  • 热部署:在运行时重新部署项目,重新加载整个应用
  • 热加载:在运行时重新加载Class

如果你在此之前已经百度过其他的教程,你对下面这幅图一定不会陌生。

在这里插入图片描述

没错,这里是项目启动时配置的地方。图中框出的就是配置热加载(HotSwap)的地方。我个人认为,配置这里对自动热部署没有直接关系,热部署配置这里属于无用的配置。

  • On ‘Update’ action:手动点击Update之后触发
  • On frame deactivation:从IDEA切换到其他应用时触发

疑问:既然热加载也可以实现重新的加载,为什么我们还要配置热部署?

回答:

  1. 热加载只加载Class,不能保证环境一致。
  2. IDEA热加载(HotSwap)目前只支持对方法body的修改,不支持对类和方法签名的修改(比如改类名、方法名、方法参数等)

    官方也曾答疑过这个问题,

    跳转链接

    在这里插入图片描述

实战测试热加载:

  1. 配置

    在这里插入图片描述
  2. 修改方法内容

    在这里插入图片描述
  3. 修改方法

    在这里插入图片描述
  4. 目前还知道修改请求路径这些也是无法热加载的



热部署配置



前提:开启自动编译

要自动热部署,不仅要保存触发操作,还需要我们编译好文件。为了省事,配置一下IDEA的自动编译。

  1. File -> settings -> Build,Execution,Deplyment -> compiler

    仅在不运行/调试时自动编译

    在这里插入图片描述
  2. option + command + shift + / (MAC) 或者 ctrl + alt + shift + / (WIN)打开Maintenance,选择Registry…

    搜索并找到app.running这一项,勾选表示程序运行时自动编译

    在这里插入图片描述



SpringLoaded方式实现热部署

不会重启整个项目,但需要配置启动参数、下载Jar包

  1. 可以在Maven仓库或者其他地方下载Jar包

    在这里插入图片描述
  2. IDEA中配置启动参数
-javaagent:/Users/doubly/Desktop/springloaded-1.2.8.RELEASE.jar -noverify

在这里插入图片描述

图中红框是Jar包的路径,我这里取得是绝对路径。

本来其实是想Maven中加这个依赖,就不需要下载Jar包了,但是不知道这里的路径应该怎么填写,有大神知道的可以指导小弟一下

  1. Debug启动,修改后可以自动热部署

在这里插入图片描述

图中这个提示就是热部署时打印出来的,但这个警告我不知道是什么,没有去查



Springboot-devtools方式实现热部署

实现简单,但整个项目全部重启,不过比手动重启快

  1. 添加依赖

    在这里插入图片描述
  2. Debug启动,实现热部署

    在这里插入图片描述



其他

因为没有亲自使用过,就不多赘述了

  1. springloaded与mvn spring-boot:run方式
  2. IDEA插件,Jrebel



版权声明:本文为qq_18335837原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。