SpringBoot系列(三):不要告訴我你還不會使用IDEA熱部署功能
作者:
修羅debug
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 by-sa 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
摘要:
本文我們將介紹分享在IDEA開發(fā)工具中開發(fā)項目時,如何加入具有自動編譯功能的Devtools熱部署功能組件,從而使得項目、系統(tǒng)在運行的過程中,我們可以在不需要重啟項目的前提下,調(diào)整完任意的功能代碼后立即看到相應(yīng)的效果。
內(nèi)容:
在微服務(wù)、分布式系統(tǒng)架構(gòu)時代,程序員喜好的開發(fā)工具多如牛毛,對于Java后端開發(fā)的程序猿而言,最中意的莫過于Intellij IDEA了,相信使用過IDEA的小伙伴都知道,便捷、高效的開發(fā)、人性化的界面以及豐富的插件等均可列為IDEA的優(yōu)點。
而在開發(fā)項目、寫代碼的過程中,相信小伙伴們也遇到過這樣的情況:“修改完一個類的字段類型后為了看效果,需要重啟IDEA”、“調(diào)整完HTML頁面一個簡單的CSS樣式后為了看效果,也需要重啟IDEA”,總之,在修改完某塊代碼后,如果你需要立即看到效果,那么,不好意思,你需要重啟才能看到!
“這是一個多么蹩腳的方式啊”!
接下來,我們將介紹一個熱部署插件Devtools,實現(xiàn)如何在不需要重啟IDEA或者項目的前提下,修改完系統(tǒng)某個微不足道的要點之后(比如數(shù)據(jù)類型、頁面樣式等等)立馬看到相應(yīng)的效果呢?別急,容老夫慢慢道來!
(1)首先第一步,當(dāng)然是在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快捷鍵(前提是你沒修改過),進(jìn)入IDEA的Settings…選項,搜索Compiler,然后在右邊找到Build project automatically選項,將其勾選上即可,如下圖所示:
(3)然后,按住Ctrl+Alt+Shift+/,選擇Registry…,進(jìn)入IDEA系統(tǒng)級別的設(shè)置,如下圖所示:
(4)在左邊一欄找到key為 compiler.automake.allow.when.app.running ,然后將其對應(yīng)的value 勾上即可,表示“應(yīng)用系統(tǒng)在運行過程中可以實現(xiàn)自動編譯”!如下圖所示:
至此,關(guān)于IDEA熱部署自動編譯功能的配置已經(jīng)全部完成了,下面就進(jìn)入自測環(huán)節(jié),自測的代碼來源于我們在第一篇文章中構(gòu)建的標(biāo)準(zhǔn)Spring Boot項目。
A.首先我們需要將項目運行起來,然后在Postman或者瀏覽器發(fā)起如下的請求鏈接:http://localhost:8081/technology/base/info?name=chengxu ,回車后可以看到如下圖的效果:
此時,我們不需要重啟項目,然后直接在后端相應(yīng)的接口調(diào)整一些代碼,如下所示:
@RequestMapping(value = "/info",method = RequestMethod.GET)
public BaseResponse info(String name){
BaseResponse response=new BaseResponse(StatusCode.Success);
try {
//這里就是調(diào)整的地方:判斷name如果為空,則為其賦值一個默認(rèn)的值
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ù),此時可以看到不同的響應(yīng)結(jié)果,如下圖所示:
B.除此之外,我們還可以做另外一個測試,新建一個BasePageController,然后開發(fā)一個請求對應(yīng)的方法用于跳轉(zhuǎn)到對應(yīng)的頁面,其代碼如下所示:
/**
* @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ā)起相應(yīng)的請求鏈接:http://localhost:8081/technology/base/page/info,回車后即可看到相應(yīng)頁面內(nèi)容,如下圖所示:
接下來,我們把“-大標(biāo)題-”對應(yīng)的頁面代碼去掉,并在后端相應(yīng)的接口返回一個data字段信息給到前端頁面page.html,后端接口代碼如下所示:
@RequestMapping("/info")
public String info(ModelMap modelMap){
modelMap.put("code","天王蓋第五");
return "page";
}
前端頁面page.html對應(yīng)的代碼如下圖所示:
在不需要重啟項目的前提下,即可在前端瀏覽器或者postman刷新一下即可看到如下圖相應(yīng)的效果:
至此,對于熱部署插件Devtools的介紹分享以及測試我們都已經(jīng)順利完成了,有了這個小功能插件的輔助,后續(xù)我們在做開發(fā)以及調(diào)試、測試時將事半功倍!
補充:
1、本文涉及到的相關(guān)的源代碼可以到此地址,check出來進(jìn)行查看學(xué)習(xí):
https://gitee.com/steadyjack/SpringBootTechnology
2、關(guān)注一下Debug的技術(shù)微信公眾號唄,最新的技術(shù)文章、技術(shù)課程以及技術(shù)專欄將會第一時間在公眾號發(fā)布哦!