Springboot靜態文件不更新的解決辦法,以及Springboot實現熱部署


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的文檔

那么本次教程就到此結束了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM