Spring Boot 中的熱部署相信你們都用過吧,只須要添加 spring-boot-devtools
依賴就能夠輕鬆實現熱部署。Spring Boot 中熱部署最最關鍵的原理就是兩個不一樣的 classloader:html
其中 base classloader 用來加載那些不會變化的類,例如各類第三方依賴,而 restart classloader 則用來加載那些會發生變化的類,例如你本身寫的代碼。Spring Boot 中熱部署的原理就是當代碼發生變化時,base classloader 不變,而 restart classloader 則會被廢棄,被另外一個新的 restart classloader 代替。在整個過程當中,由於只從新加載了變化的類,因此啓動速度要被重啓快。spring
可是有另一個問題,就是靜態資源文件!使用 devtools ,默認狀況下當靜態資源發生變化時,並不會觸發項目重啓。雖然咱們能夠經過配置解決這一問題,可是沒有必要!由於靜態資源文件發生變化後不須要編譯,按理說保存後刷新下就能夠訪問到了。後端
那麼如何才能實現靜態資源變化後,不編譯就能自動刷新呢? LiveReload 能夠幫助咱們實現這一功能!瀏覽器
devtools 中默認嵌入了 LiveReload 服務器,利用 LiveReload 能夠實現靜態文件的熱部署,LiveReload 能夠在資源發生變化時自動觸發瀏覽器更新,LiveReload 支持 Chrome、Firefox 以及 Safari 。以 Chrome 爲例,在 Chrome 應用商店搜索 LiveReload ,結果以下圖:服務器
將第一個搜索結果添加到 Chrome 中,添加成功後,在 Chrome 右上角有一個 LiveReload 圖標app
在瀏覽器中打開項目的頁面,而後點擊瀏覽器右上角的 LiveReload 按鈕,打開 LiveReload 鏈接。前後端分離
注意:spring-boot
LiveReload 是和瀏覽器選項卡綁定在一塊兒的,在哪一個選項卡中打開了 LiveReload,就在哪一個選項卡中訪問頁面,這樣纔有效果。微服務
打開 LiveReload 以後,咱們啓動一個加了 devtools 依賴的 Spring Boot 項目:spa
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
此時隨便在 resources/static 目錄下添加一個靜態 html 頁面,而後啓動 Spring Boot 項目,在打開了 LiveReload 的選項卡中訪問 html 頁面。
訪問成功後,咱們再去手動修改 html 頁面代碼,修改爲功後,回到瀏覽器,不用作任何操做,就會發現瀏覽器自動刷新了,頁面已經更新了。
整個過程當中,個人 Spring Boot 項目並無重啓。
若是開發者安裝而且啓動了 LiveReload 插件,同時也添加了 devtools 依賴,可是卻並不想當靜態頁面發生變化時瀏覽器自動刷新,那麼能夠在 application.properties 中添加以下代碼進行配置:
spring.devtools.livereload.enabled=false
建議開發者使用 LiveReload 策略而不是項目重啓策略來實現靜態資源的動態加載,由於項目重啓所耗費時間通常來講要超過使用LiveReload 所耗費的時間。
Firefox 也能夠安裝 LiveReload 插件,裝好以後和 Chrome 用法基本一致,這裏再也不贅述。
關注公衆號【江南一點雨】,專一於 Spring Boot+微服務以及先後端分離等全棧技術,按期視頻教程分享,關注後回覆 Java ,領取鬆哥爲你精心準備的 Java 乾貨!
原文出處:https://www.cnblogs.com/lenve/p/11325041.html