Springboot靜態文件不更新的解決辦法,以及Springboot實現熱部署
原文鏈接:https://www.cnblogs.com/blog5277/p/9271882.html
原文作者:博客園--曲高終和寡
最近在用Springboot寫web項目的時候,遇到了一個問題:
前端頁面寫完以后,用Update classes and resources方式更新tomcat,沒有用!必須完全重啟.
這肯定不行,前端的小伙伴不干,調個樣式就要等幾秒,開發效率太慢了.
之前寫Spring MVC項目的時候完全沒有這樣的問題,經過一陣摸索和百度,最后解決了這個問題,目前百度谷歌到的答案其實都不完整(甚至壓根就是錯的)
先說第一個問題:
更新html,css,js文件以后,為啥Update classes and resources不更新呢?因為我這里用了Springboot推薦的第一個web模板引擎--> thymeleaf
這里純屬個人猜測了:
因為萬惡的資本主義,不懂國內牆里的情況,人家為了方便開發,Springboot啟動的時候默認啟動了一個服務:LiveReload
這東西干嘛用的呢,就是網頁連刷新都不用刷新了,資源文件一更新直接顯示在頁面上了,美滋滋的
但是這個東西呢,需要去Chrome瀏覽器的插件商店裝個插件...不翻牆是沒法裝的...
所以在國外是個非常方便的東西,在國內就成了好多人用不了的不知名東西...
然后thymeleaf模板引擎默認開啟了靜態文件緩存,加快了訪問速度,國外有LiveReload這個東西監聽資源文件,可以實時更新了以后reload項目,顯示在頁面上,
但是國內沒有啊,更新的靜態文件就被thymeleaf緩存了,除非完全重啟項目才能把項目緩存釋放,否則就一直在緩存里面,就造成了不更新的現象了...
想用LiveReload的話,就去 菩提樹下的楊過 大大的文章里面配吧,鏈接在下面(反正我是后端程序員我也用不到,跟我搭班的前端又不會翻牆懶得給他整)
https://www.cnblogs.com/yjmyzz/p/use-devtools-of-spring-boot-framework.html
開始講解決辦法:
在application.yml(或者是你的配置文件里),把thymeleaf的緩存關閉,如下圖所示:

可以看到,人家默認是true,選成false:(注意這里前面應該有個spring:,但是由於yml文件形式的格式這里沒有,在第二層就不用spring,懂我意思就行了,用yml的話打個ca,就有代碼提示,按下去就行了)

這樣,再用Update classes and resources方式更新就能更新靜態文件了.
再說第二個問題:
我在搜第一個問題的時候"springboot 靜態文件(或者資源文件) 不更新"百度谷歌都給的莫名其妙的答案,就是我接下來要講的熱部署,然而這根本就不是解決問題的辦法,並且他們給的還少了最關鍵的一步:)(這一步可能是用tomcat啟動時候的最關鍵一步,用jar包的話可能確實不用,但是別人都沒提)
1.修改pom.xml,在dependency那里引入熱部署devtools的maven引用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
在下面的build-->plugins那里,把原來的springboot,maven的插件修改成這樣:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart --> <fork>true</fork> </configuration> </plugin>
2.打開設置,在這里,這個勾要打上

3,Mac用戶同時按下 shitf+option+command+/ ,windows用戶的話,大概是 shift+ctrl+alt+/(我猜的,不敢保證,自己試一下),會彈出這個界面:

就選第一個,Resgistry
往下翻,找到這一條,打上勾,關閉(我這個是因為之前已經打過勾了才變藍置頂的,沒打過勾以前是白色的,跟c開頭的一堆設置在一塊的,往下翻翻找找看)

最重要的一步來了,Tomcat形式啟動不用這一步根本沒法熱部署:
既然都接觸到熱部署了,那肯定知道這個頁面是哪里,就是配置tomcat這里,這一條一定要改成這個

好,接下來要在application.yml(或者是你自己的配置文件里)配置熱部署的觸發規則了
我其實后端不怎么需要熱部署,我寫代碼一下子寫一天,功能都實現了再開debug統一調試(嘻嘻嘻,其實不推薦....),主要是給前端小伙伴用的,而這個devtool工具呢,又默認把前端設置成不會熱部署了,如圖:

那么我們就得手動指定排除熱部署的文件,替代掉它這里的默認路徑,那么,一個靜態文件更新就自動熱部署的配置就是如下:(注意,devtools是spring的下一級)
devtools:
restart:
#熱部署生效
enabled: true
#設置重啟的目錄
additional-paths: resources/**,static/**,templates/**
#該目錄下的內容修改不重啟
exclude: data/**
我排除了一個完全不存在的路徑,就把默認的設置替換掉了,就可以熱部署了
這里完全是按需設置啊,比如說想讓Java文件更新就可以在addition-paths那里把java的路徑配上,比如說可以設置trigger-file,必須修改這個文件,才會觸發熱部署等等,還有很多設置,可以自己去看devtools的文檔
那么本次教程就到此結束了
