日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

加速 SpringBoot 应用开发,官方热部署神器真带劲!

發(fā)布時間:2025/3/16 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加速 SpringBoot 应用开发,官方热部署神器真带劲! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

?

spring-boot-devtools簡介

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

?

實現(xiàn)原理

使用該工具應用為什么啟動更快了?主要是因為它使用了兩種不同的類加載器。基礎類加載器用于加載不會改變的類(比如第三方庫中的類),重啟類加載器用于加載你應用程序中的類。當應用程序啟動時,重啟類加載器中的類將會被替換掉,這就意味著重啟將比冷啟動更快!

?

熱部署

接下來我們將集成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)@ResponseBodypublic?CommonResult?first()?{String?message?=?"返回消息";return?CommonResult.success(null,message);} }
  • 然后啟動項目,啟動成功后通過Swagger訪問接口,返回結果如下,訪問地址:http://localhost:8088/swagger-ui.html

{"code":?200,"message":?"返回消息","data":?null }
  • 由于在項目構建時,devtools才會自動重啟項目,而IDEA默認并沒有使用自動構建,此時我們可以修改應用啟動配置,設置當IDEA失去焦點時自動構建項目;

  • 修改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)@ResponseBodypublic?CommonResult?first()?{String?message?=?"返回消息(已修改)";return?CommonResult.success(null,message);} }
  • 失去焦點后,等待項目自動構建,此時訪問接口出現(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的編譯所需時間存在差異,當IDEA還沒編譯完成,devtools就已經(jīng)重啟應用了,導致了這個問題,修改application.yml配置文件,添加如下配置即可;

spring:devtools:restart:poll-interval:?2squiet-period:?1s
  • 此時再次訪問測試接口,顯示內(nèi)容如下,修改后的代碼已經(jīng)被自動應用了。

{"code":?200,"message":?"返回消息(已修改)","data":?null }

?

?

遠程調(diào)試

devtools除了支持熱部署之外,還支持遠程調(diào)試,接下來我們把應用部署到Docker容器中,然后試試遠程調(diào)試!

  • 由于SpringBoot默認打包不會包含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的遠程訪問密碼;

spring:devtools:remote:secret:?macro666
  • 接下來把項目打包成Docker鏡像,然后使用如下命令運行起來;

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,配置信息具體如下;

  • 啟動該配置,控制臺輸出如下結果表示遠程連接成功;

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)@ResponseBodypublic?CommonResult?first()?{String?message?=?"返回消息(遠程調(diào)試)";return?CommonResult.success(null,message);} }
  • 遠程調(diào)試如果自動構建的話會導致遠程服務頻繁重啟,此時我們可以使用IDEA手動構建,在項目的右鍵菜單中可以找到構建按鈕;

  • 構建成功后可以發(fā)現(xiàn)遠程服務會自動重啟,并應用修改后的代碼,訪問測試接口返回如下信息;

{"code":?200,"message":?"返回消息(遠程調(diào)試)","data":?null }

?

總結

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

?

項目源碼地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-devtools

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的加速 SpringBoot 应用开发,官方热部署神器真带劲!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。