平時使用SpringBoot開發應用時,修改代碼后需要重新啟動才能生效。如果你的應用足夠大的話,啟動可能需要好幾分鐘。有沒有什么辦法可以加速啟動過程,讓我們開發應用代碼更高效呢?今天給大家推薦一款SpringBoot官方的熱部署工具spring-boot-devtools,修改完代碼后可快速自動重啟應用!
?
spring-boot-devtools簡介
SpringBoot官方開發工具,如果你的應用集成了它,即可實現熱部署和遠程調試。
?
實現原理
使用該工具應用為什么啟動更快了?主要是因為它使用了兩種不同的類加載器。基礎類加載器用于加載不會改變的類(比如第三方庫中的類),重啟類加載器用于加載你應用程序中的類。當應用程序啟動時,重啟類加載器中的類將會被替換掉,這就意味著重啟將比冷啟動更快!
?
熱部署
接下來我們將集成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);}
}
{"code":?200,"message":?"返回消息","data":?null
}
/***?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);}
}
{"timestamp":?"2021-03-29T07:09:05.415+00:00","status":?404,"error":?"Not?Found","message":?"No?message?available","path":?"/test/first"
}
spring:devtools:restart:poll-interval:?2squiet-period:?1s
{"code":?200,"message":?"返回消息(已修改)","data":?null
}
?
?
遠程調試
devtools除了支持熱部署之外,還支持遠程調試,接下來我們把應用部署到Docker容器中,然后試試遠程調試!
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--打包時不排除Devtools--><excludeDevtools>false</excludeDevtools></configuration>
</plugin>
spring:devtools:remote:secret:?macro666
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
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)
/***?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);}
}
{"code":?200,"message":?"返回消息(遠程調試)","data":?null
}
?
總結
雖說使用SpringBoot官方的devtools可以進行熱部署,但是這種方式更像是熱重啟,如果你想要更快的熱部署體驗的話可以使用JRebel。
?
項目源碼地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-devtools
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
總結
以上是生活随笔為你收集整理的加速 SpringBoot 应用开发,官方热部署神器真带劲!的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。