SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

软件工具
333
0
0
2022-04-02

本文我们将介绍分享在IDEA开发工具中开发项目时,如何加入具有自动编译功能的Devtools热部署功能组件,从而使得项目、系统在运行的过程中,我们可以在不需要重启项目的前提下,调整完任意的功能代码后立即看到相应的效果。

在微服务、分布式系统架构时代,程序员喜好的开发工具多如牛毛,对于Java后端开发的程序猿而言,最中意的莫过于Intellij IDEA了,相信使用过IDEA的小伙伴都知道,便捷、高效的开发、人性化的界面以及丰富的插件等均可列为IDEA的优点。

而在开发项目、写代码的过程中,相信小伙伴们也遇到过这样的情况:“修改完一个类的字段类型后为了看效果,需要重启IDEA”、“调整完HTML页面一个简单的CSS样式后为了看效果,也需要重启IDEA”,总之,在修改完某块代码后,如果你需要立即看到效果,那么,不好意思,你需要重启才能看到!

“这是一个多么蹩脚的方式啊”!

接下来,我们将介绍一个热部署插件Devtools,实现如何在不需要重启IDEA或者项目的前提下,修改完系统某个微不足道的要点之后(比如数据类型、页面样式等等)立马看到相应的效果呢?别急,容老夫慢慢道来!

(1)首先第一步,当然是在server模块加入devtools的依赖jar啦,如下所示:

<!-- 引入热部署jar包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖该项目的项目如果想要使用devtools,需要重新引入 --><optional>true</optional></dependency>

(2)首先,按住Ctrl+Alt+S快捷键(前提是你没修改过),进入IDEA的Settings…选项,搜索Compiler,然后在右边找到Build project automatically选项,将其勾选上即可,如下图所示:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

(3)然后,按住Ctrl+Alt+Shift+/,选择Registry…,进入IDEA系统级别的设置,如下图所示:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

(4)在左边一栏找到key为

compiler.automake.allow.when.app.running ,然后将其对应的value 勾上即可,表示“应用系统在运行过程中可以实现自动编译”!如下图所示:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

至此,关于IDEA热部署自动编译功能的配置已经全部完成了,下面就进入自测环节,自测的代码来源于我们在第一篇文章中构建的标准Spring Boot项目。

A

首先我们需要将项目运行起来,然后在Postman或者浏览器发起如下的请求链接:

http://localhost:8081/technology/base/info?name=chengxu ,回车后可以看到如下图的效果:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

此时,我们不需要重启项目,然后直接在后端相应的接口调整一些代码,如下所示:


@RequestMapping(value = "/info",method = RequestMethod.GET)
 public BaseResponse info(String name){
 BaseResponse response=new BaseResponse(StatusCode.Success);
 try {
 //这里就是调整的地方:判断name如果为空,则为其赋值一个默认的值if (StringUtils.isBlank(name)){
 name="这里是程序员实战基地:http://www.fightjava.com";
 }
 response.setData(name);
 }catch (Exception e){
 response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage());
 }
 return response;
 }

修改完成代码之后,切记“不用重启、不用重启、不用重启”,因为你会看到控制台它自动重启了!!!

然后在浏览器或者postman起新的请求:

http://localhost:8081/technology/base/info ,即不需要带上name参数,此时可以看到不同的响应结果,如下图所示:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

B

除此之外,我们还可以做另外一个测试,新建一个BasePageController,然后开发一个请求对应的方法用于跳转到对应的页面,其代码如下所示:


/**
 * @Author:debug (SteadyJack)
 * @Date: 2019/8/24 17:25
 **/ 
@Controller
@RequestMapping("base/page")
public class BasePageController extends AbstractController{
 @RequestMapping("/info")public String info(){
 return "page";
 }
}

写完了之后,我们可以在前端浏览器或者postman发起相应的请求链接:

http://localhost:8081/technology/base/page/info,回车后即可看到相应页面内容,如下图所示:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

接下来,我们把“-大标题-”对应的页面代码去掉,并在后端相应的接口返回一个data字段信息给到前端页面page.html,后端接口代码如下所示:


@RequestMapping("/info")
 public String info(ModelMap modelMap){
 modelMap.put("code","天王盖第五");
 return "page";
 }

前端页面page.html对应的代码如下图所示:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

在不需要重启项目的前提下,即可在前端浏览器或者postman刷新一下即可看到如下图相应的效果:

SpringBoot系列(三):不要告诉我你还不会使用IDEA热部署功能

至此,对于热部署插件Devtools的介绍分享以及测试我们都已经顺利完成了,有了这个小功能插件的辅助,后续我们在做开发以及调试、测试时将事半功倍!