IDEA關於springboot Thymeleaf 熱部署,修改java文件無需手動編譯重啓

1、前言

  1. 每次修改完java文件或者thmeleaf模版文件後,須要從新編譯 rebuild 才能生效,這就顯得很麻煩了。
  2. spring爲開發者提供了一個名爲spring-boot-devtools的模塊來使Spring Boot應用支持熱部署,提升開發者的開發效率,無需手動重啓Spring Boot應用。
  3. spring-boot-devtools是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。
  4. 原理是在發現代碼有更改以後,從新啓動應用,可是速度比手動中止後再啓動更快。
  5. 其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間。
  6. 即devtools會監聽classpath下的文件變更,而且會當即重啓應用(發生在保存時機)

2、IDEA自動編譯設置

  1. File-Settings-Compiler-Build Project automatically
    圖片描述
  2. ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
  3. compile.document.save.trigger.delay -> 自動更新文件, 它主要是針對靜態文件如JS CSS的更新,將延遲時間減小後,直接按F5刷新頁面就能看到效果!

    圖片描述

  4. 頂部菜單- >Edit Configurations->SpringBoot插件->目標項目->勾選熱更新
    圖片描述

3、pom.xml中添加熱部署依賴及application.proerties配置

  1. 在dependency中添加devtools依賴html

    <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-devtools</artifactId>
               <optional>true</optional>
               <scope>runtime</scope>
           </dependency>
  2. plugin中配置configurationjava

    <build>
           <plugins>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                   <!--如下fork爲true必須添加-->
                   <configuration>
                       <fork>true</fork>
                       <addResources>true</addResources>
                   </configuration>
               </plugin>
           </plugins>
       </build>
  3. 在application.properties中配置spring.devtools.restart.enabled=false,此時restart類加載器還會初始化,但不會監視文件更新。
  4. 在SprintApplication.run以前調用System.setProperty(「spring.devtools.restart.enabled」, 「false」);能夠徹底關閉重啓支持
  5. 配置內容:spring

    #熱部署生效
    spring.devtools.restart.enabled=true
    #設置重啓的目錄
    #spring.devtools.restart.additional-paths: src/main/java
    #classpath目錄下的WEB-INF文件夾內容修改不重啓
    spring.devtools.restart.exclude: WEB-INF/**

4、測試

  • 修改類–>保存:應用會重啓
  • 修改配置文件–>保存:應用會重啓
  • 修改頁面–>保存:應用不會重啓,但會從新加載,頁面會刷新(原理是將spring.thymeleaf.cache設爲false,參考:Spring Boot配置模板引擎)

5、參考連接

https://liuyanzhao.com/7105.html
https://www.cnblogs.com/lspz/...app

6、IDEA+Springboot+JRebel插件熱部署實現

  1. 除了使用devtools實現熱部署功能,還能夠安裝JRebel插件來實現熱部署
  2. 參考連接:
    https://www.jianshu.com/p/bdc...
    https://www.cnblogs.com/code-...
    https://www.cnblogs.com/qwang...
  3. JReble插件激活破解方式:
    https://blog.csdn.net/xingbao...
相關文章
相關標籤/搜索