spring-boot 熱加載實現替換Jrebel

導讀:
本文主要說說,在玩spring-boot時,我們經常要遇到重啓服務這種浪費時間的事情,爲了割掉這個痛點,我們一般有2中方式實現。
一個是springload , 另外一個是 spring-boot-devtools

方式1:springload

springload 的Maven配置爲如下:
spring-loaded是一個開源項目,項目地址:https://github.com/spring-projects/spring-loaded

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

當系統通過 mvn spring-boot:run啓動或者 右鍵application debug 啓動java文件時,系統會監視classes文件,當有classes文件被改動時,系統會重新加載類文件,不用重啓啓動服務
ps:需要重新編譯文件 ctl+shift+f9

方式2:dev-tools

maven工程使用spring-boot-devtools進行熱部署,更改代碼避免重啓web容器 .

        <!-- 
             devtools可以實現頁面熱部署(即頁面修改後會立即生效,這個可以直接在application.properties文件中配置spring.thymeleaf.cache=false來實現),
           實現類文件熱部署(類文件修改後不會立即生效),實現對屬性文件的熱部署。
            即devtools會監聽classpath下的文件變動,並且會立即重啓應用(發生在保存時機),注意:因爲其採用的虛擬機機制,該項重啓是很快的
         -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
             <optional>true</optional><!-- optional=true,依賴不會傳遞,該項目依賴devtools;之後依賴myboot項目的項目如果想要使用devtools,需要重新引入 -->
         </dependency>

spring-boot-devtools 是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。相關Blog: 點擊打開鏈接
原理是在發現代碼有更改之後,重新啓動應用,但是比速度比手動停止後再啓動還要更快,更快指的不是節省出來的手工操作的時間。
其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱爲 restart ClassLoader
,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啓時間(5秒以內)。
由於devtools僅在 Spring milestone repository. 倉庫中提供,而默認的倉庫版本是1.2.5.RELEASE,所以需要在POM.XML 文件中配置倉庫地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章