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


作者: 修罗debug
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。



摘要:

本文我们将介绍分享在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选项,将其勾选上即可,如下图所示:  


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


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



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

A.首先我们需要将项目运行起来,然后在Postman或者浏览器发起如下的请求链接:http://localhost:8081/technology/base/info?name=chengxu ,回车后可以看到如下图的效果:



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

    @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参数,此时可以看到不同的响应结果,如下图所示:


  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,回车后即可看到相应页面内容,如下图所示:  


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

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

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



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



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


补充:

1、本文涉及到的相关的源代码可以到此地址,check出来进行查看学习:

https://gitee.com/steadyjack/SpringBootTechnology

2、关注一下Debug的技术微信公众号呗,最新的技术文章、技术课程以及技术专栏将会第一时间在公众号发布哦!