(40). springboot + devtools(熱部署)【從零開始學Spring Boot】

     

     咱們以前在在3Spring Boot熱部署【從零開始學Spring Boot java

http://412887952-qq-com.iteye.com/blog/2291518 )講過經過使用springloadedspring

進行熱部署,可是有部分代碼修改了,並不會進行部署。今天咱們介紹的這個經過重啓的機制就能夠解決這個問題了。sql

       咱們今天要介紹的就是:spring-boot-devtools數據庫

spring-boot-devtools 是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。原理是在發現代碼有更改以後,從新啓動應用,可是比速度比手動中止後再啓動還要更快,更快指的不是節省出來的手工操做的時間。瀏覽器

其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲  restart ClassLoader緩存

,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間(5秒之內)。springboot

 

那如何使用呢,大概兩個步驟便可:restful

第一就是添加相應的依賴:app

<!--eclipse

           devtools能夠實現頁面熱部署(即頁面修改後會當即生效,這個能夠直接在application.properties文件中配置spring.thymeleaf.cache=false來實現),    

           實現類文件熱部署(類文件修改後不會當即生效),實現對屬性文件的熱部署。 

           devtools會監聽classpath下的文件變更,而且會當即重啓應用(發生在保存時機),注意:由於其採用的虛擬機機制,該項重啓是很快的    

        -->

       <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

            <optional>true</optional>

        </dependency>

 

第二加點:僅僅加入devtools在咱們的eclipse中還不起做用,這時候還須要添加的spring-boot-maven-plugin

<build>

       <plugins>

           <!--

             用於將應用打成可直接運行的jar(該jar就是用於生產環境中的jar 值得注意的是,若是沒有引用spring-boot-starter-parentparent

                       且採用了上述的第二種方式,這裏也要作出相應的改動

             -->

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

                <configuration>

                   <!--fork :  若是沒有該項配置,肯呢個devtools不會起做用,即應用不會restart -->

                    <fork>true</fork>

                </configuration>

            </plugin>

       </plugins>

   </build>

 

運行App.java  ---- Run Application --- Java Application便可進行測試。

測試方法:

·         修改類-->保存:應用會重啓

·         修改配置文件-->保存:應用會重啓

·         修改頁面-->保存:應用會重啓,頁面會刷新(原理是將spring.thymeleaf.cache設爲false

 

不能使用分析:

(a)     對應的spring-boot版本是否正確,我這裏使用的是1.3.3版本;

(b)     是否加入plugin了,以及屬性<fork>true</fork>

(c)      Eclipse Project 是否開啓了Build Automatically(我本身就在這裏栽了坑,不知道爲何個人工具何時關閉了自動編譯的功能)。

(d)     若是設置SpringApplication.setRegisterShutdownHook(false),則自動重啓將不起做用。

 

補充:

默認狀況下,/META-INF/maven/META-INF/resources/resources/static/templates/public這些文件夾下的文件修改不會使應用重啓,可是會從新加載devtools內嵌了一個LiveReload server當資源發生改變時,瀏覽器刷新)。

 

·         若是想改變默認的設置,能夠本身設置不重啓的目錄:spring.devtools.restart.exclude=static/**,public/**,這樣的話,就只有這兩個目錄下的文件修改不會致使restart操做了。

 

·         若是要在保留默認設置的基礎上還要添加其餘的排除目錄:spring.devtools.restart.additional-exclude

 

·         若是想要使得當非classpath下的文件發生變化時應用得以重啓,使用:spring.devtools.restart.additional-paths,這樣devtools就會將該目錄列入了監聽範圍。

 

 

關閉自動重啓

設置 spring.devtools.restart.enabled 屬性爲false,能夠關閉該特性。能夠在application.properties中設置,也能夠經過設置環境變量的方式。

publicstaticvoidmain(String[] args){
    System.setProperty("spring.devtools.restart.enabled","false");

 

    SpringApplication.run(MyApp.class, args);

 

Spring Boot 系列博客】

58. Spring Boot國際化(i18n)【從零開始學Spring Boot 

 

57. Spring 自定義properties升級篇【從零開始學Spring Boot 

 

56. spring boot中使用@Async實現異步調用【從零開始學Spring Boot 

 

55. spring boot 服務配置和部署【從零開始學Spring Boot 

 

54. spring boot日誌升級篇—logback【從零開始學Spring Boot

 

52. spring boot日誌升級篇—log4j多環境不一樣日誌級別的控制【從零開始學Spring Boot 

 

51. spring boot屬性文件之多環境配置【從零開始學Spring Boot

 

50. Spring Boot日誌升級篇—log4j【從零開始學Spring Boot

 

49. spring boot日誌升級篇理論【從零開始學Spring Boot

 

48. spring boot單元測試restfull API【從零開始學Spring Boot

 

47. Spring Boot發送郵件【從零開始學Spring Boot

 

46. Spring Boot中使用AOP統一處理Web請求日誌

 

45. Spring Boot MyBatis鏈接Mysql數據庫【從零開始學Spring Boot

 

44. Spring Boot日誌記錄SLF4J【從零開始學Spring Boot

 

43. Spring Boot動態數據源(多數據源自動切換)【從零開始學Spring Boot

 

42. Spring Boot多數據源【從零開始學Spring Boot

 

41. Spring Boot 使用Java代碼建立Bean並註冊到Spring中【從零開始學Spring Boot

 

40. springboot + devtools(熱部署)【從零開始學Spring Boot 

 

39.4 Spring Boot Shiro權限管理【從零開始學Spring Boot

 

39.3 Spring Boot Shiro權限管理【從零開始學Spring Boot

 

39.2. Spring Boot Shiro權限管理【從零開始學Spring Boot

 

39.1 Spring Boot Shiro權限管理【從零開始學Spring Boot

 

38 Spring Boot分佈式Session狀態保存Redis【從零開始學Spring Boot 

 

37 Spring Boot集成EHCache實現緩存機制【從零開始學Spring Boot 

 

36 Spring Boot Cache理論篇【從零開始學Spring Boot

 

35 Spring Boot集成Redis實現緩存機制【從零開始學Spring Boot 

 

34Spring Boot的啓動器Starter詳解【從零開始學Spring Boot

 

33 Spring Boot 監控和管理生產環境【從零開始學Spring Boot

 

32 Spring Boot使用@SpringBootApplication註解從零開始學Spring Boot 

 

31 Spring Boot導入XML配置【從零開始學Spring Boot

 

 

 

更多查看博客: http://412887952-qq-com.iteye.com/

相關文章
相關標籤/搜索