轉自https://www.zybuluo.com/weiys/note/1141626html
使用spring boot時,修改類文件或資源文件時,須要從新啓動應用才生效,並且通常應用重啓消耗時間比較長,很是影響開發效率。這裏提供了兩種方案解決應用熱部署的問題。java
spring-boot-devtools是spring爲開發者提供的支持spring boot應用熱部署的模塊,以提升開發效率,它的實現原理是提供兩個ClassLoader,一個基類ClassLoader用於加載不改變的類(如第三方jar包),另外一個重啓類ClassLoader用於加載應用中會變化的Class。當應用程序從新啓動時,重啓動類ClassLoader將被丟棄並建立一個新的ClassLoader。這種方法意味着應用程序從新啓動會比較快,由於基類加ClassLoader已經可用而且不會從新啓動。
spring-boot-devtools官方說明spring
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默認是不開啓自動編譯選項,須要手工開啓自動編譯,開啓方式以下:
File->Settings->Build,Execution,Deployment->Compiler
將Build project automatically選項勾選上。
當應用是在running或者debugging模式下運行時,開啓了該選項還不能自動編譯,還須要修改Registry,經過Ctrl+Shift+Alt+/快捷鍵,打開Registry.
在Registry配置界面找到compiler.automake.allow.when.app.running配置項,將其value勾選上。
spring-boot
雖說基於spring-boot-devtools的熱部署方案能夠解決掉手動重啓的麻煩,也比手動重啓快的多,可是畢竟也要從新加載所有的應用代碼,仍是以爲比較耗時。這裏再介紹另外一種方案,使用Jrebel工具。
Idea安裝方式:
一、離線安裝:Idea的Jrebel插件地址:Jrebel插件下載
二、在線安裝:在idea插件管理搜索jrebel,在線安裝。
安裝後重啓Idea,在工具欄中看到下圖中這幾個圖標說明已經安裝成功。
Jrebel和Idea同樣,也提供兩種啓動模式,Run和Debug模式。使用了Jrebel工具啓動應用的話,就會禁掉spring-boot-devtools。在Idea中修改類文件或者靜態資源文件,直接按「Ctrl+F9」,Jrebel就會從新加載修改的類文件,而後刷新瀏覽器就可看到修改的代碼已生效。工具
Jrebel只從新加載修改過的類文件,沒有修改的類不會從新加載,比spring-boot-devtools從新加載快的多。