加速 SpringBoot 應(yīng)用開發(fā),官方熱部署神器真帶勁柜去!

平時使用SpringBoot開發(fā)應(yīng)用時灰嫉,修改代碼后需要重新啟動才能生效。如果你的應(yīng)用足夠大的話嗓奢,啟動可能需要好幾分鐘讼撒。有沒有什么辦法可以加速啟動過程,讓我們開發(fā)應(yīng)用代碼更高效呢股耽?今天給大家推薦一款SpringBoot官方的熱部署工具spring-boot-devtools根盒,修改完代碼后可快速自動重啟應(yīng)用!

spring-boot-devtools簡介

SpringBoot官方開發(fā)工具物蝙,如果你的應(yīng)用集成了它炎滞,即可實現(xiàn)熱部署和遠(yuǎn)程調(diào)試。

實現(xiàn)原理

使用該工具應(yīng)用為什么啟動更快了诬乞?主要是因為它使用了兩種不同的類加載器厂榛。基礎(chǔ)類加載器用于加載不會改變的類(比如第三方庫中的類)丽惭,重啟類加載器用于加載你應(yīng)用程序中的類。當(dāng)應(yīng)用程序啟動時辈双,重啟類加載器中的類將會被替換掉责掏,這就意味著重啟將比冷啟動更快!

熱部署

接下來我們將集成devtools湃望,來演示下熱部署功能换衬。

  • 首先需要在項目的pom.xml文件中,添加devtools的依賴证芭;
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
  • 為了方便測試瞳浦,我們在項目中添加了如下測試接口;
/**
 * Created by macro on 2021/3/25.
 */
@Api(tags = "TestController", description = "SpringBoot Dev Tools測試")
@Controller
@RequestMapping("/test")
public class TestController {

    @ApiOperation("測試修改")
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    @ResponseBody
    public CommonResult first() {
        String message = "返回消息";
        return CommonResult.success(null,message);
    }
}
{
  "code": 200,
  "message": "返回消息",
  "data": null
}
  • 由于在項目構(gòu)建時官硝,devtools才會自動重啟項目矗蕊,而IDEA默認(rèn)并沒有使用自動構(gòu)建短蜕,此時我們可以修改應(yīng)用啟動配置,設(shè)置當(dāng)IDEA失去焦點(diǎn)時自動構(gòu)建項目傻咖;
    image.png
  • 修改Controller中的代碼朋魔,只要修改下message變量即可;
/**
 * Created by macro on 2021/3/25.
 */
@Api(tags = "TestController", description = "SpringBoot Dev Tools測試")
@Controller
@RequestMapping("/test")
public class TestController {

    @ApiOperation("測試修改")
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    @ResponseBody
    public CommonResult first() {
        String message = "返回消息(已修改)";
        return CommonResult.success(null,message);
    }
}
  • 失去焦點(diǎn)后卿操,等待項目自動構(gòu)建警检,此時訪問接口出現(xiàn)404問題;
{
  "timestamp": "2021-03-29T07:09:05.415+00:00",
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/test/first"
}
  • 由于devtools檢測時間和IDEA的編譯所需時間存在差異害淤,當(dāng)IDEA還沒編譯完成扇雕,devtools就已經(jīng)重啟應(yīng)用了,導(dǎo)致了這個問題筝家,修改application.yml配置文件洼裤,添加如下配置即可;
spring:
  devtools:
    restart:
      poll-interval: 2s
      quiet-period: 1s
  • 此時再次訪問測試接口溪王,顯示內(nèi)容如下腮鞍,修改后的代碼已經(jīng)被自動應(yīng)用了。
{
  "code": 200,
  "message": "返回消息(已修改)",
  "data": null
}

遠(yuǎn)程調(diào)試

devtools除了支持熱部署之外莹菱,還支持遠(yuǎn)程調(diào)試移国,接下來我們把應(yīng)用部署到Docker容器中,然后試試遠(yuǎn)程調(diào)試道伟!

  • 由于SpringBoot默認(rèn)打包不會包含devtools迹缀,所以我們需要先修改下pom.xml
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!--打包時不排除Devtools-->
        <excludeDevtools>false</excludeDevtools>
    </configuration>
</plugin>
  • 接下來需要application.yml文件蜜徽,添加devtools的遠(yuǎn)程訪問密碼祝懂;
 spring:
  devtools:
    remote:
      secret: macro666
  • 接下來把項目打包成Docker鏡像,然后使用如下命令運(yùn)行起來拘鞋;
docker run -p 8088:8088 --name mall-tiny-devtools \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny/logs:/var/logs \
-d mall-tiny/mall-tiny-devtools:1.0-SNAPSHOT
  • 添加一個啟動配置砚蓬,修改啟動類為org.springframework.boot.devtools.RemoteSpringApplication,配置信息具體如下盆色;
    image.png
  • 啟動該配置灰蛙,控制臺輸出如下結(jié)果表示遠(yuǎn)程連接成功;
2021-03-29 15:49:50.991  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication v2.3.0.RELEASE on DESKTOP-5NIMJ19 with PID 7848
2021-03-29 15:49:51.003  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : No active profile set, falling back to default profiles: default
2021-03-29 15:49:51.664  WARN 7848 --- [           main] o.s.b.d.r.c.RemoteClientConfiguration    : The connection to http://192.168.5.78:8088 is insecure. You should use a URL starting with 'https://'.
2021-03-29 15:49:52.024  INFO 7848 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-03-29 15:49:52.055  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 2.52 seconds (JVM running for 4.236)
  • 接下來我們再次修改下Controller中的測試代碼隔躲,只要修改下message變量即可摩梧;
/**
 * Created by macro on 2021/3/25.
 */
@Api(tags = "TestController", description = "SpringBoot Dev Tools測試")
@Controller
@RequestMapping("/test")
public class TestController {

    @ApiOperation("測試修改")
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    @ResponseBody
    public CommonResult first() {
        String message = "返回消息(遠(yuǎn)程調(diào)試)";
        return CommonResult.success(null,message);
    }
}
  • 遠(yuǎn)程調(diào)試如果自動構(gòu)建的話會導(dǎo)致遠(yuǎn)程服務(wù)頻繁重啟,此時我們可以使用IDEA手動構(gòu)建宣旱,在項目的右鍵菜單中可以找到構(gòu)建按鈕仅父;
    image.png
  • 構(gòu)建成功后可以發(fā)現(xiàn)遠(yuǎn)程服務(wù)會自動重啟,并應(yīng)用修改后的代碼,訪問測試接口返回如下信息驾霜;
{
  "code": 200,
  "message": "返回消息(遠(yuǎn)程調(diào)試)",
  "data": null
}

總結(jié)

雖說使用SpringBoot官方的devtools可以進(jìn)行熱部署案训,但是這種方式更像是熱重啟,如果你想要更快的熱部署體驗的話可以使用JRebel粪糙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末强霎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蓉冈,更是在濱河造成了極大的恐慌城舞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寞酿,死亡現(xiàn)場離奇詭異家夺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伐弹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門拉馋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惨好,你說我怎么就攤上這事煌茴。” “怎么了日川?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵蔓腐,是天一觀的道長。 經(jīng)常有香客問我龄句,道長回论,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任分歇,我火速辦了婚禮傀蓉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘职抡。我一直安慰自己僚害,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布繁调。 她就那樣靜靜地躺著,像睡著了一般靶草。 火紅的嫁衣襯著肌膚如雪蹄胰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天奕翔,我揣著相機(jī)與錄音裕寨,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛宾袜,可吹牛的內(nèi)容都是我干的捻艳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庆猫,長吁一口氣:“原來是場噩夢啊……” “哼认轨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起月培,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤嘁字,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杉畜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纪蜒,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年此叠,在試婚紗的時候發(fā)現(xiàn)自己被綠了纯续。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灭袁,死狀恐怖猬错,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情简卧,我是刑警寧澤兔魂,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站举娩,受9級特大地震影響析校,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铜涉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一智玻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芙代,春花似錦吊奢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铺呵,卻和暖如春裹驰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背片挂。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工幻林, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贞盯,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓沪饺,卻偏偏與公主長得像躏敢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子整葡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 今天感恩節(jié)哎件余,感謝一直在我身邊的親朋好友。感恩相遇掘宪!感恩不離不棄蛾扇。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,564評論 0 11
  • 彩排完魏滚,天已黑
    劉凱書法閱讀 4,217評論 1 3
  • 表情是什么镀首,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息鼠次。高興了當(dāng)然就笑了更哄,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,004評論 2 7