SpringBoot系列(三):不要告訴我你還不會使用IDEA熱部署功能


作者: 修羅debug
版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 by-sa 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。



摘要:

本文我們將介紹分享在IDEA開發(fā)工具中開發(fā)項目時,如何加入具有自動編譯功能的Devtools熱部署功能組件,從而使得項目、系統(tǒng)在運行的過程中,我們可以在不需要重啟項目的前提下,調整完任意的功能代碼后立即看到相應的效果。

內(nèi)容:

在微服務、分布式系統(tǒng)架構時代,程序員喜好的開發(fā)工具多如牛毛,對于Java后端開發(fā)的程序猿而言,最中意的莫過于Intellij IDEA了,相信使用過IDEA的小伙伴都知道,便捷、高效的開發(fā)、人性化的界面以及豐富的插件等均可列為IDEA的優(yōu)點。

而在開發(fā)項目、寫代碼的過程中,相信小伙伴們也遇到過這樣的情況:“修改完一個類的字段類型后為了看效果,需要重啟IDEA”、“調整完HTML頁面一個簡單的CSS樣式后為了看效果,也需要重啟IDEA”,總之,在修改完某塊代碼后,如果你需要立即看到效果,那么,不好意思,你需要重啟才能看到!

“這是一個多么蹩腳的方式啊”!

接下來,我們將介紹一個熱部署插件Devtools,實現(xiàn)如何在不需要重啟IDEA或者項目的前提下,修改完系統(tǒng)某個微不足道的要點之后(比如數(shù)據(jù)類型、頁面樣式等等)立馬看到相應的效果呢?別急,容老夫慢慢道來!

(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系統(tǒng)級別的設置,如下圖所示:  


  (4)在左邊一欄找到key為 compiler.automake.allow.when.app.running ,然后將其對應的value 勾上即可,表示“應用系統(tǒng)在運行過程中可以實現(xiàn)自動編譯”!如下圖所示:  



至此,關于IDEA熱部署自動編譯功能的配置已經(jīng)全部完成了,下面就進入自測環(huán)節(jié),自測的代碼來源于我們在第一篇文章中構建的標準Spring Boot項目。

A.首先我們需要將項目運行起來,然后在Postman或者瀏覽器發(fā)起如下的請求鏈接: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="這里是程序員實戰(zhàn)基地:http://www.fightjava.com";
}
response.setData(name);
}catch (Exception e){
response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage());
}
return response;
}


修改完成代碼之后,切記“不用重啟、不用重啟、不用重啟”,因為你會看到控制臺它自動重啟了?。。?/span>

然后在瀏覽器或者postman起新的請求:http://localhost:8081/technology/base/info ,即不需要帶上name參數(shù),此時可以看到不同的響應結果,如下圖所示:


  B.除此之外,我們還可以做另外一個測試,新建一個BasePageController,然后開發(fā)一個請求對應的方法用于跳轉到對應的頁面,其代碼如下所示:  

/**
* @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發(fā)起相應的請求鏈接:http://localhost:8081/technology/base/page/info,回車后即可看到相應頁面內(nèi)容,如下圖所示:  


接下來,我們把“-大標題-”對應的頁面代碼去掉,并在后端相應的接口返回一個data字段信息給到前端頁面page.html,后端接口代碼如下所示:  

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

前端頁面page.html對應的代碼如下圖所示:  



在不需要重啟項目的前提下,即可在前端瀏覽器或者postman刷新一下即可看到如下圖相應的效果:  



至此,對于熱部署插件Devtools的介紹分享以及測試我們都已經(jīng)順利完成了,有了這個小功能插件的輔助,后續(xù)我們在做開發(fā)以及調試、測試時將事半功倍!  


補充:

1、本文涉及到的相關的源代碼可以到此地址,check出來進行查看學習:

https://gitee.com/steadyjack/SpringBootTechnology

2、關注一下Debug的技術微信公眾號唄,最新的技術文章、技術課程以及技術專欄將會第一時間在公眾號發(fā)布哦!