SpringBoot靜態資源CSS等修改後再運行無效問題

問題背景

在美化網頁過程中,修改好CSS後在本地已經可以顯示出我想要的效果了。於是就把修改好後的css加載到springboot中運行,結果問題出現了:我修改後的css樣式始終不能加載!打開F12看到css樣式成功的被請求,然後再進一步點進去看css文件,發現我修改的部分並沒有加載,現在用的css還是我修改以前的css。這裏我注意到一個細節,然後才明白是怎麼回事
在這裏插入圖片描述

原來spring boot會把靜態文件緩存到瀏覽器本地。但這樣就造成了一個問題:如果服務器靜態文件修改,瀏覽器端在未過期之前是不會重新加載文件的。此時需要通過版本號來控制。spring boot版本號支持兩種,一種是文件md5,另一種是固定版本號。我採用的是md5方式,spring boot啓動時會計算每個靜態文件的md5值並緩存,瀏覽器訪問時每個靜態文件後綴前加上md5值作爲版本號,如果服務器md5值改變則瀏覽器重新加載。(需要重啓應用纔會重新生成md5)

下面來設置md5方式:

1、先設置文件配置application.properties
# 資源緩存時間,單位秒
spring.resources.cache.period=604800
# 開啓gzip壓縮
spring.resources.chain.compressed=true
# 啓用緩存
spring.resources.chain.cache=true
# 使用MD5版本號
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
2、添加靜態資源控制類,使用ResourceUrlProvider
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.resource.ResourceUrlProvider;

/**
 *  使用ResourceUrlProvider進行版本管理
 *  並避免在版本發生改變時,由於瀏覽器緩存而產生資源版本未改變的錯誤
 */
@ControllerAdvice
public class ControllerConfig {

    @Autowired
    private ResourceUrlProvider resourceUrlProvider;

    @ModelAttribute("urls")
    public ResourceUrlProvider urls() {
        return this.resourceUrlProvider;
    }

}
3、在網頁中引用靜態文件

注意:如果使用的thymeleaf模板引擎的話,那麼需要這麼進行編寫:

<link rel="stylesheet" th:href="${urls.getForLookupPath('/css/font.css')}">
<link rel="stylesheet" th:href="${urls.getForLookupPath('/css/xadmin.css')}">
<script th:src="${urls.getForLookupPath('/lib/layui/layui.js')}" charset="utf-8"></script>
<script type="text/javascript" th:src="${urls.getForLookupPath('/js/xadmin.js')}"></script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章