成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

體驗Spring-Boot-Devtools熱部署,流暢且不失強大

開發 前端
一個高級開發工程師,第一次用SpringBoot,決定打印一個經典的HelloWorld。由于他太激動了,結果打錯了一個字母,變成了HalloWorld。

[[342929]]

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗 。轉載本文請聯系小姐姐味道公眾號。  

一個高級開發工程師,第一次用SpringBoot,決定打印一個經典的HelloWorld。

由于他太激動了,結果打錯了一個字母,變成了HalloWorld。

哈嘍?多么土多么俗多么沒有檔次,就像是嘴里含了個檳郎,吐不出氣來,絕對需要進行改正。

結果,改成hello之后,高工發現需要重啟應用才能生效。整整等了十多秒,系統才磨磨蹭蹭的啟動起來。

有些東西,時間長了是好事,但對于這種代碼調試場景來說,就讓人無法忍受。

高工吐出嘴里的檳郎,心想,是時候開發一個加快調試速度的工具了。

這就是SBDT的由來。

spring-boot-devtools

SpringBoot,StringBuilder,StringBuffer,俗稱Java界的3個SB。尤其是SpringBoot,非常的好用,主要歸功于它的autoconfig,靠約定來規范開發。

但問題是,SpringBoot加載的Jar包太多、太大了,每次啟動都要花費很長時間。對于SpringBoot服務來說,spring-boot-devtools就像一陣及時雨,滋潤著瞪眼發呆盯著重啟屏幕的同學。

雖然這個東西已經出來很長時間了,但我發現在現實項目中,大家用到的還是比較少。但它的使用非常簡單。

只需要在項目的pom文件中,加入下面的jar包即可獲取秒級的服務重載(熱部署)。

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-devtools</artifactId> 
  4.     <scope>runtime</scope> 
  5.     <optional>true</optional> 
  6. </dependency> 

 

由于starter文件中默認的值就是true,所以下面yml中的配置,并不是必須的。

  1. spring: 
  2.   devtools: 
  3.     restart: 
  4.       enabled: true 

我們來驗證一下。來的很快。

新建一個簡單的controller,輸出halloworld。

  1. @Controller 
  2. public class DemoController { 
  3.     @GetMapping("/test"
  4.     @ResponseBody 
  5.     public String test(){ 
  6.         return "halloworld"
  7.     } 

修改代碼,把hallo改成hello。控制臺中將開始滾動輸出日志,加載項目代碼。此時訪問瀏覽器,發現我們的改動生效了。

  1. # 日志顯示 
  2. Started MbyeApplication in 1.731 seconds (JVM running for 51.115) 

控制臺也輸出了本次restart的時間,只花了不到2秒鐘,可以說是飛快了。

為了在代碼修改后,能夠實時的觸發編譯,你需要在IDEA中做如下配置。如果這個配置不生效,就需要手動點擊一下Build了(注意不是rebuild)。

為什么熱部署的重新加載能夠這么快呢?因為它的重新啟動并不是完整的重啟整個應用,而是只重啟我們的應用代碼。

通過配置META-INF/spring-devtools.properties文件,可以指定每次重新啟動都加載第三方jar包。不過這種場景比較少。當然,有include,舊有exclude,示例如下。

  1. restart.exclude.somejar=/somejar-[\\w-]+\.jar 
  2. restart.include.ajar=/ajar-[\\w-]+\.jar 

注意到一件有意思的事情。當我們使用IDEA啟動的時候,控制臺的輸出是這樣的。

  1. 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) 
  2. 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 
  3. 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! 
  4. 2020-09-18 21:34:00.355  INFO 4635 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode. 
  5. 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. 
  6. 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! 
  7. 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。但當我們使用java -jar *jar來啟動的時候,主進程并不是restartedMain,而是main。

這是因為,線上環境開啟devtools,是沒有意義的。

這句話暫時這么說,因為會打臉。

更多功能

要想了解devtools有什么功能,我們先來看一下它的源碼目錄結構。

filewatch和classpath就不必說了,通過監聽文件的變化,即可實現熱啟動。它原理上是使用一個獨立的ClassLoader(具體是指RestartClassLoader),來完成加載后的替換。

學習一下這部分的代碼,可以對Java的類加載器有更好的理解。

LiveReload

接下來就是livereload功能。

LiveReload在做前端開發的時候,經常會用到。

devtools也會在后臺開啟一個LiveReload Server,瀏覽器會與這個Server保持著一個長連接,當后端有前端資源變動的時候,將會通知瀏覽器進行刷新,實現熱部署。

下面是Chrome的Remote Live Reload插件地址。安裝即可擁有這個酷炫的功能。

  1. https://chrome.google.com/webstore/detail/remotelivereload/jlppknnillhjgiengoigajegdpieppei?hl=en-GB 

遠程部署

這個就有意思多了。我們上面說到,線上環境開啟devtools,是沒有意義的,現在來打臉。

你可能自己的機器性能比較低,讓代碼運行在遠端,本地只管代碼開發。這時候,就可以使用遠程熱部署。

要開啟這個功能,需要做的步驟有點多。

步驟一。

需要在pom.xml中對spring-boot-maven-plugin做如下的更改。

  1. <plugin> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-maven-plugin</artifactId> 
  4.     <configuration> 
  5.         <excludeDevtools>false</excludeDevtools> 
  6.     </configuration> 
  7. </plugin> 

 

 

步驟二。

在yml中設置一個服務端與調試端連接的密鑰。

  1. spring: 
  2.   devtools: 
  3.     remote: 
  4.       secret: test 

步驟三。

將SB服務打包成jar,然后啟動。

  1. mvn -Dmaven.test.skip=true -Pdev package 
  2.  
  3. java -jar -Xdebug  \ 
  4. -Xrunjdwp:server=y,transport=dt_socket,suspend=n  \ 
  5. mbye-0.0.1-SNAPSHOT.jar 

可以看到我們在啟動的時候加入了很多參數,這就是開啟遠程被調戲的意思。

步驟四。

在本地IDEA中編輯一個Java文件,并在啟動變量里塞進我們的服務端地址(和應用地址一樣)。

  1. import org.springframework.boot.devtools.RemoteSpringApplication; 
  2.  
  3. /** 
  4.  * @date 2020/09/19 
  5.  */ 
  6. public class Remote { 
  7.     public static void main(String[] args) { 
  8.         RemoteSpringApplication.main(new String[]{"http://localhost:8080"}); 
  9.     } 

步驟五。

進行驗證。隨便編輯一個能看到效果的文件,然后點擊build。

下面是IDEA開發端的截圖。

下面是服務端截圖。可以看到服務已經重新載入了,不過速度特別快。

  1. Listening for remote restart updates on /.~~spring-boot!~/restart 
  2. Started MbyeApplication in 1.961 seconds (JVM running for 249.452) 

訪問web頁面,發現代碼已經上傳成功了。

其實,spring-boot-devtools,還不算是最強大的。因為它每次都會使用ClassLoader重新載入項目的class文件。如果你的項目文件特別多,那也是比較慢的。

有一個更牛的工具,叫做jrebel,那可真是開發的利器。更棒的是,它能用在任何Java項目上,而不僅僅限制于SpringBoot項目中。不過,它有點重,而且是收費的。下次我們介紹一下它,或者你已經提前去體驗了 。

 

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2024-08-09 08:52:26

2021-11-02 16:44:40

部署DevtoolsJRebel

2021-12-31 13:40:43

Spring Boot熱部署Java

2021-05-21 10:24:52

AngularDevTools擴展

2025-04-08 02:22:22

SpringJackson注解

2025-04-30 08:39:33

SpringMVC接口

2024-11-27 09:58:41

Spring模塊化管理方式

2014-03-19 10:07:44

同洲飛看2機頂盒

2022-03-07 09:00:00

HTTPS證書中間件

2025-04-29 07:44:26

配置校驗機制

2020-12-15 10:46:29

事件監聽器Spring Boot

2024-11-06 11:33:09

2024-11-01 10:40:32

2025-02-12 08:57:43

Spring動態注冊組件

2024-12-06 09:27:28

2025-02-07 10:52:00

2023-09-11 08:31:12

自動配置熱部署DevTools

2023-10-12 22:38:18

SpringBoot熱部署

2012-03-06 10:47:18

Windows 8系統

2025-04-07 02:33:00

項目開發Spring
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频国产一区 | 天天影视网天天综合色在线播放 | 视频一区二区国产 | 欧美一级欧美三级在线观看 | www.国产 | 中文字幕一区二区三区不卡 | 欧美亚洲第一区 | 精品一区二区三区四区五区 | 国产欧美一区二区三区在线看 | 欧美日韩亚洲国产 | 婷婷色国产偷v国产偷v小说 | a免费视频 | 国产成人在线播放 | www.亚洲精品 | 在线视频91 | 亚洲伊人a | 国产免费一区二区三区最新6 | 91免费电影 | 精品国产伦一区二区三区观看体验 | 日韩字幕一区 | 国产福利91精品一区二区三区 | 91不卡在线| 天天干天天色 | 国产成人精品一区二区三区视频 | 三级黄片毛片 | 国产一区二区三区色淫影院 | 成人夜晚看av | 在线成人 | 欧美13videosex性极品 | a级在线观看 | 亚洲色图在线观看 | 97色综合 | 人操人人 | 国产乱码精品一区二区三区忘忧草 | 99福利 | 91久久精品一区二区二区 | 欧美日韩国产综合在线 | 成人精品一区二区三区四区 | 久久不射电影网 | 亚洲免费在线 | 在线看无码的免费网站 |