Spring boot熱部署配置[轉]

Spring boot熱部署配置

轉自https://www.zybuluo.com/weiys/note/1141626html

 


使用spring boot時,修改類文件或資源文件時,須要從新啓動應用才生效,並且通常應用重啓消耗時間比較長,很是影響開發效率。這裏提供了兩種方案解決應用熱部署的問題。java

  1. 使用spring-boot-devtools模塊
  2. 使用Jrebel工具
 

基於spring-boot-devtools的熱部署

spring-boot-devtools是spring爲開發者提供的支持spring boot應用熱部署的模塊,以提升開發效率,它的實現原理是提供兩個ClassLoader,一個基類ClassLoader用於加載不改變的類(如第三方jar包),另外一個重啓類ClassLoader用於加載應用中會變化的Class。當應用程序從新啓動時,重啓動類ClassLoader將被丟棄並建立一個新的ClassLoader。這種方法意味着應用程序從新啓動會比較快,由於基類加ClassLoader已經可用而且不會從新啓動。 
spring-boot-devtools官方說明spring

 

pom.xml配置

pom.xml引入spring-boot-devtools依賴瀏覽器

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
</dependency>

pom.xml的plugins節點增長spring-boot maven插件配置緩存

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <fork>true</fork><!--fork配置爲true,devtools纔會生效 -->
    </configuration>
</plugin>
 

熱部署配置

在application.yml的spring節點增長如下配置app

spring:
        devtools:
        restart:
            enabled: true                               # 熱部署開關,false即不啓用
            exclude: static/**,public/**,templates/**   # 排除指定目錄
        additional-paths: src/main/java                 # 指定熱部署目錄

配置項說明以下: 
enabled:熱部署啓用開關,true:啓用;false:不啓用。 
exclude:配置不觸發熱部署的目錄,也就是該目錄下的文件修改不會致使restart。 
additional-paths:指定熱部署的目錄,如該目錄的文件內容修改了,會自動restart。maven

這裏配置的熱部署目錄是java類文件所在路徑,將靜態資源下的目錄排除,也就是隻有src/main/java目錄下的文件修改纔會觸發熱部署,其它目錄修改都不會觸發熱部署。若是靜態資源是放在resources目錄下的話,最好仍是放在additional-paths中,不然修改了靜態資源文件也不會觸發熱部署。 
若是是使用Thymeleaf模板引擎的話,須要將緩存去年,否當修改了視圖頁面的話,刷新頁面也不會生效,這是由於spring boot中對模板引擎編譯結果進行了緩存。在application.yml增長以下配置,便可去掉緩存:ide

spring:
    thymeleaf:
        cache: false
 

Idea配置

修改了代碼須要編譯後纔會生效,idea默認是不開啓自動編譯選項,須要手工開啓自動編譯,開啓方式以下: 
File->Settings->Build,Execution,Deployment->Compiler 
將Build project automatically選項勾選上。 
配置自動編譯
當應用是在running或者debugging模式下運行時,開啓了該選項還不能自動編譯,還須要修改Registry,經過Ctrl+Shift+Alt+/快捷鍵,打開Registry. 
Registry.png-5.2kB 
在Registry配置界面找到compiler.automake.allow.when.app.running配置項,將其value勾選上。 
Registry2.png-36kBspring-boot

 

基於Jrebel的熱部署

雖說基於spring-boot-devtools的熱部署方案能夠解決掉手動重啓的麻煩,也比手動重啓快的多,可是畢竟也要從新加載所有的應用代碼,仍是以爲比較耗時。這裏再介紹另外一種方案,使用Jrebel工具。 
Idea安裝方式: 
一、離線安裝:Idea的Jrebel插件地址:Jrebel插件下載 
二、在線安裝:在idea插件管理搜索jrebel,在線安裝。 
Jebel插件.png-44kB 
安裝後重啓Idea,在工具欄中看到下圖中這幾個圖標說明已經安裝成功。 
Jrebel.png-4.1kB 
Jrebel和Idea同樣,也提供兩種啓動模式,Run和Debug模式。使用了Jrebel工具啓動應用的話,就會禁掉spring-boot-devtools。在Idea中修改類文件或者靜態資源文件,直接按「Ctrl+F9」,Jrebel就會從新加載修改的類文件,而後刷新瀏覽器就可看到修改的代碼已生效。工具

Jrebel只從新加載修改過的類文件,沒有修改的類不會從新加載,比spring-boot-devtools從新加載快的多。

相關文章
相關標籤/搜索