最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年04月28日 11:11:20   作者:Be a funny man.  
這篇文章主要介紹了Spring boot實(shí)現(xiàn)熱部署的兩種方式,這兩種方法分別是使用 Spring Loaded和使用spring-boot-devtools進(jìn)行熱部署,文中給出了詳細(xì)示例代碼和介紹,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。

熱部署是什么

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

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

類加載機(jī)制

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

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

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

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

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

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>

添加完畢,啟動(dòng)項(xiàng)目

Note

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

spring-boot-devtools

添加 POM 文件依賴

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

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

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

Important(特別注意)

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

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

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

如圖打鉤即可。

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

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

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

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

總結(jié)

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

相關(guān)文章

  • idea下如何設(shè)置項(xiàng)目啟動(dòng)的JVM運(yùn)行內(nèi)存大小

    idea下如何設(shè)置項(xiàng)目啟動(dòng)的JVM運(yùn)行內(nèi)存大小

    這篇文章主要介紹了idea下如何設(shè)置項(xiàng)目啟動(dòng)的JVM運(yùn)行內(nèi)存大小問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中如何取出String字符串括號中的內(nèi)容

    Java中如何取出String字符串括號中的內(nèi)容

    這篇文章主要介紹了Java中如何取出String字符串括號中的內(nèi)容問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • BeanUtils.copyProperties在拷貝屬性時(shí)忽略空值的操作

    BeanUtils.copyProperties在拷貝屬性時(shí)忽略空值的操作

    這篇文章主要介紹了BeanUtils.copyProperties在拷貝屬性時(shí)忽略空值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java深入講解Object類常用方法的使用

    Java深入講解Object類常用方法的使用

    前面java繼承中說到的Object類是java中一個(gè)特殊的類,所有的類都是直接或者間接的繼承自O(shè)bject類,即如果某個(gè)類沒有使用extends關(guān)鍵字則默認(rèn)是java.lang.Object類的子類,所以所有的類都可以使用Object類中定義的方法,下面介紹Object類的常用方法
    2022-04-04
  • Mybatis中連接查詢和嵌套查詢實(shí)例代碼

    Mybatis中連接查詢和嵌套查詢實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Mybatis中連接查詢和嵌套查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳細(xì)講解springboot如何實(shí)現(xiàn)異步任務(wù)

    詳細(xì)講解springboot如何實(shí)現(xiàn)異步任務(wù)

    異步:異步與同步相對,當(dāng)一個(gè)異步過程調(diào)用發(fā)出后,調(diào)用者在沒有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。也就是說無論異步方法執(zhí)行代碼需要多長時(shí)間,跟主線程沒有任何影響,主線程可以繼續(xù)向下執(zhí)行
    2022-04-04
  • SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作的代碼示例

    SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作的代碼示例

    Zookeeper是一個(gè)Apache開源的分布式的應(yīng)用,為系統(tǒng)架構(gòu)提供協(xié)調(diào)服務(wù),ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶,本文給大家介紹了SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作,需要的朋友可以參考下
    2024-05-05
  • Struts2 Result 返回JSON對象詳解

    Struts2 Result 返回JSON對象詳解

    這篇文章主要講解Struts2返回JSON對象的兩種方式,講的比較詳細(xì),希望能給大家做一個(gè)參考。
    2016-06-06
  • maven的pom.xml中profiles的作用詳解

    maven的pom.xml中profiles的作用詳解

    這篇文章主要介紹了maven的pom.xml中profiles的作用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Springboot實(shí)現(xiàn)高吞吐量異步處理詳解(適用于高并發(fā)場景)

    Springboot實(shí)現(xiàn)高吞吐量異步處理詳解(適用于高并發(fā)場景)

    這篇文章主要介紹了Springboot實(shí)現(xiàn)高吞吐量異步處理詳解(適用于高并發(fā)場景),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論

来宾市| 顺平县| 囊谦县| 大冶市| 万山特区| 阿克陶县| 徐水县| 天津市| 抚顺市| 奎屯市| 蒲城县| 会理县| 大余县| 柳河县| 望奎县| 大厂| 图木舒克市| 绥棱县| 新竹县| 定日县| 波密县| 颍上县| 黄骅市| 正安县| 江山市| 乌兰浩特市| 三都| 新邵县| 达日县| 汤阴县| 房产| 阳新县| 中卫市| 肇源县| 都匀市| 陵川县| 龙州县| 鲁甸县| 台安县| 马鞍山市| 裕民县|