欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Springboot實現(xiàn)熱部署的兩種方式詳解

熱部署是什么

創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以網(wǎng)站設(shè)計制作、成都做網(wǎng)站、移動互聯(lián)產(chǎn)品、成都營銷網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。十年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

大家都知道在項目開發(fā)過程中,常常會改動頁面數(shù)據(jù)或者修改數(shù)據(jù)結(jié)構(gòu),為了顯示改動效果,往往需要重啟應(yīng)用查看改變效果,其實就是重新編譯生成了新的 Class 文件,這個文件里記錄著和代碼等對應(yīng)的各種信息,然后 Class 文件將被虛擬機(jī)的 ClassLoader 加載。

而熱部署正是利用了這個特點,它監(jiān)聽到如果有 Class 文件改動了,就會創(chuàng)建一個新的 ClaassLoader 進(jìn)行加載該文件,經(jīng)過一系列的過程,最終將結(jié)果呈現(xiàn)在我們眼前。

類加載機(jī)制

Java 中的類經(jīng)過編譯器可以把代碼編譯為存儲字節(jié)碼的 Class 文件,該 Class 文件存儲了各種信息,最終要加載到虛擬機(jī)中運行使用。

類加載機(jī)制(摘自《深入理解 Java 虛擬機(jī)》)

      虛擬機(jī)把描述類的數(shù)據(jù)從 Class 文件加載到內(nèi)存中,并對數(shù)據(jù)進(jìn)行校驗、轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直接使用的 Java 類型。

Spring Boot 實現(xiàn)熱部署

Spring Boot 實現(xiàn)熱部署很簡單,我們使用上一章創(chuàng)建的項目 Springboot 創(chuàng)建簡單的 web 交互應(yīng)用 來演示。

  • 使用 Spring Loaded
  • 使用 spring-boot-devtools

springloaded

在 POM 文件中添加依賴

<build>
 <plugins>
 <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <dependencies>
   <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>springloaded</artifactId>
    <version>1.2.6.RELEASE</version>
   </dependency>
  </dependencies>
 </plugin>
 </plugins>
</build>

添加完畢,啟動項目

Note

這次啟動不能直接運行 main 方法了,需要使用
mvn spring-boot:run 啟動,然后隨意在代碼中寫一個 System.out.println("Hi") ,再次調(diào)用那個方法,會發(fā)現(xiàn)控制臺會打印出 Hi。

spring-boot-devtools

添加 POM 文件依賴

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <optional>true</optional> <!-- 這個需要為 true 熱部署才有效 -->
</dependency>

然后還是使用 mvn spring-boot:run 啟動項目,隨意更改代碼即可看到效果。

如果我們想指定讓 devtools 監(jiān)聽指定文件夾,那么可以在 application.yml 配置
spring.devtools.restart.additional-paths=your path,注意這里需要改成 yml 文件的格式。

Important(特別注意)

可能會有同學(xué)按照以上方法處理了都無效。

這里要特別注意下:由于熱部署是監(jiān)聽 Class 文件的變化,它自身不會主動去編譯 Java 文件,所以我們得在 Java 文件改動時,自動編譯成 Class 文件,然后熱部署工具創(chuàng)造的新的類加載器才會加載改變后的 Class 文件。

所以,如果你使用 IDEA 開發(fā)工具的話,記得要把自動編譯打開。

Spring boot實現(xiàn)熱部署的兩種方式詳解

如圖打鉤即可。

由于熱部署的時候是產(chǎn)生了新的類加載器,我們的一個類可能在虛擬機(jī)中存在兩個類,比如代碼中就一個 User 類,但是虛擬機(jī)中會存在兩個 User ,雖然是同一個 Class 文件,但是卻是兩個獨立的類,這個要清楚。

由于第一次使用熱部署,一開始遇到個很奇怪的問題,A instanceof A == false,明明兩個 A.getClass() 都一樣,但結(jié)果就是 false,還問了幾個朋友,表示都沒遇到,后來當(dāng)我把 devtools 依賴注釋后,才正確執(zhí)行。

如果有遇到類似問題的朋友,可以檢查下是不是由于不同的 ClassLoader 造成的。

本系列所有代碼已同步到 GitHub, 項目地址 github:sboot-learn,大家也可以通過本地進(jìn)行下載。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。

網(wǎng)站題目:Springboot實現(xiàn)熱部署的兩種方式詳解
瀏覽地址:http://chinadenli.net/article46/goghhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作外貿(mào)建站建站公司服務(wù)器托管App設(shè)計網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化