您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么部署Spring-Boot-Devtools”,在日常操作中,相信很多人在怎么部署Spring-Boot-Devtools問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么部署Spring-Boot-Devtools”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
spring-boot-devtools
SpringBoot,StringBuilder,StringBuffer,俗稱Java界的3個SB。尤其是SpringBoot,非常的好用,主要?dú)w功于它的autoconfig,靠約定來規(guī)范開發(fā)。
但問題是,SpringBoot加載的Jar包太多、太大了,每次啟動都要花費(fèi)很長時間。對于SpringBoot服務(wù)來說,spring-boot-devtools就像一陣及時雨,滋潤著瞪眼發(fā)呆盯著重啟屏幕的同學(xué)。
雖然這個東西已經(jīng)出來很長時間了,但我發(fā)現(xiàn)在現(xiàn)實(shí)項目中,大家用到的還是比較少。但它的使用非常簡單。
只需要在項目的pom文件中,加入下面的jar包即可獲取秒級的服務(wù)重載(熱部署)。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
由于starter文件中默認(rèn)的值就是true,所以下面yml中的配置,并不是必須的。
spring: devtools: restart: enabled: true
我們來驗證一下。來的很快。
新建一個簡單的controller,輸出halloworld。
@Controller public class DemoController { @GetMapping("/test") @ResponseBody public String test(){ return "halloworld"; } }
修改代碼,把hallo改成hello??刂婆_中將開始滾動輸出日志,加載項目代碼。此時訪問瀏覽器,發(fā)現(xiàn)我們的改動生效了。
# 日志顯示 Started MbyeApplication in 1.731 seconds (JVM running for 51.115)
控制臺也輸出了本次restart的時間,只花了不到2秒鐘,可以說是飛快了。
為了在代碼修改后,能夠?qū)崟r的觸發(fā)編譯,你需要在IDEA中做如下配置。如果這個配置不生效,就需要手動點(diǎn)擊一下Build了(注意不是rebuild)。
為什么熱部署的重新加載能夠這么快呢?因為它的重新啟動并不是完整的重啟整個應(yīng)用,而是只重啟我們的應(yīng)用代碼。
通過配置META-INF/spring-devtools.properties文件,可以指定每次重新啟動都加載第三方j(luò)ar包。不過這種場景比較少。當(dāng)然,有include,舊有exclude,示例如下。
restart.exclude.somejar=/somejar-[\\w-]+\.jar restart.include.ajar=/ajar-[\\w-]+\.jar
注意到一件有意思的事情。當(dāng)我們使用IDEA啟動的時候,控制臺的輸出是這樣的。
2020-09-18 21:33:59.495 INFO 4635 --- [ restartedMain] c.g.javarunfast.mbye.MbyeApplication : Starting MbyeApplication on LYCYs-MacBook-Pro.local with PID 4635 (/target/classes started by xjjdog in /Users/xjjdog/codes/javarunfast/mbye) 2020-09-18 21:33:59.495 INFO 4635 --- [ restartedMain] c.g.javarunfast.mbye.MbyeApplication : No active profile set, falling back to default profiles: default 2020-09-18 21:34:00.355 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode! 2020-09-18 21:34:00.355 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode. 2020-09-18 21:34:00.357 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 1ms. Found 0 Elasticsearch repository interfaces. 2020-09-18 21:34:00.362 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode! 2020-09-18 21:34:00.362 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.
里面的啟動線程是restartedMain。但當(dāng)我們使用java -jar *jar來啟動的時候,主進(jìn)程并不是restartedMain,而是main。
這是因為,線上環(huán)境開啟devtools,是沒有意義的。
這句話暫時這么說,因為會打臉。
更多功能
要想了解devtools有什么功能,我們先來看一下它的源碼目錄結(jié)構(gòu)。
filewatch和classpath就不必說了,通過監(jiān)聽文件的變化,即可實(shí)現(xiàn)熱啟動。它原理上是使用一個獨(dú)立的ClassLoader(具體是指RestartClassLoader),來完成加載后的替換。
學(xué)習(xí)一下這部分的代碼,可以對Java的類加載器有更好的理解。
LiveReload
接下來就是livereload功能。
LiveReload在做前端開發(fā)的時候,經(jīng)常會用到。
devtools也會在后臺開啟一個LiveReload Server,瀏覽器會與這個Server保持著一個長連接,當(dāng)后端有前端資源變動的時候,將會通知瀏覽器進(jìn)行刷新,實(shí)現(xiàn)熱部署。
下面是Chrome的Remote Live Reload插件地址。安裝即可擁有這個酷炫的功能。
https://chrome.google.com/webstore/detail/remotelivereload/jlppknnillhjgiengoigajegdpieppei?hl=en-GB
遠(yuǎn)程部署
這個就有意思多了。我們上面說到,線上環(huán)境開啟devtools,是沒有意義的,現(xiàn)在來打臉。
你可能自己的機(jī)器性能比較低,讓代碼運(yùn)行在遠(yuǎn)端,本地只管代碼開發(fā)。這時候,就可以使用遠(yuǎn)程熱部署。
要開啟這個功能,需要做的步驟有點(diǎn)多。
步驟一。
需要在pom.xml中對spring-boot-maven-plugin做如下的更改。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludeDevtools>false</excludeDevtools> </configuration> </plugin>
步驟二。
在yml中設(shè)置一個服務(wù)端與調(diào)試端連接的密鑰。
spring: devtools: remote: secret: test
步驟三。
將SB服務(wù)打包成jar,然后啟動。
mvn -Dmaven.test.skip=true -Pdev package java -jar -Xdebug \ -Xrunjdwp:server=y,transport=dt_socket,suspend=n \ mbye-0.0.1-SNAPSHOT.jar
可以看到我們在啟動的時候加入了很多參數(shù),這就是開啟遠(yuǎn)程被調(diào)戲的意思。
步驟四。
在本地IDEA中編輯一個Java文件,并在啟動變量里塞進(jìn)我們的服務(wù)端地址(和應(yīng)用地址一樣)。
import org.springframework.boot.devtools.RemoteSpringApplication; /** * @date 2020/09/19 */ public class Remote { public static void main(String[] args) { RemoteSpringApplication.main(new String[]{"http://localhost:8080"}); } }
步驟五。
進(jìn)行驗證。隨便編輯一個能看到效果的文件,然后點(diǎn)擊build。
下面是IDEA開發(fā)端的截圖。
下面是服務(wù)端截圖??梢钥吹椒?wù)已經(jīng)重新載入了,不過速度特別快。
Listening for remote restart updates on /.~~spring-boot!~/restart Started MbyeApplication in 1.961 seconds (JVM running for 249.452)
訪問web頁面,發(fā)現(xiàn)代碼已經(jīng)上傳成功了。
其實(shí),spring-boot-devtools,還不算是最強(qiáng)大的。因為它每次都會使用ClassLoader重新載入項目的class文件。如果你的項目文件特別多,那也是比較慢的。
到此,關(guān)于“怎么部署Spring-Boot-Devtools”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。