91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot2.0實現靜態資源版本控制詳解

發布時間:2020-09-19 09:23:16 來源:腳本之家 閱讀:169 作者:小賣鋪的老爺爺 欄目:編程語言

寫在最前面

猶記畢業第一年時,公司每次發布完成后,都會在一個群里通知【版本更新,各部門清理緩存,有問題及時反饋】之類的話。歸根結底就是資源緩存的問題,瀏覽器會將請求到的靜態資源,如JS、CSS等文件緩存到用戶本地,當用戶再次訪問時就不需要再次請求這些資源了,以此也是提升了用戶體驗。但是也正是因為這些資源緩存,導致客戶端的靜態文件往往不是當前最新版本。后來有同事增加了時間戳、隨機數等,確實這也解決了客戶端緩存的問題,但是卻又帶來了新的麻煩,導致每次訪問都要請求服務器,無形中增加了服務器的壓力。

那么有什么辦法可以讓客戶端當需要更新時才去請求,不需更新就不請求嗎?當然有,實現方式很多種,像前端實現,webjars實現等都可以,但是麻煩還是麻煩,太燒腦。介紹一種Spring自身提供的方式,也是我目前所應用的方式,ResourceUrlProvider。

ResourceUrlProvider的實現效果有兩種,大家可以在后文中看到。下面話不多說了,來一起看看詳細的介紹吧

第一種、MD5實現

首先在application.yml或者application.properties中增加配置文件

spring: 
 resources:
 chain:
  strategy:
  content:
   enabled: true
   paths: /**

其次,如果您恰巧和我一樣使用Thymeleaf作為模板引擎,則可以和我一樣使用@bean語法直接從模板訪問ResourceUrlProvider bean。

<script th:src="${@mvcResourceUrlProvider.getForLookupPath('/mods/admin/login.js')}"></script>

如果您使用的模板引擎無法直接訪問Spring bean,則可以將ResourceUrlProvider 添加到Spring中。使用ControllerAdvice,代碼如下:

@ControllerAdvice
public class ControllerConfig {

 @Autowired
 ResourceUrlProvider resourceUrlProvider;

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

}

然后在頁面上通過下述代碼引用:

<script th:src="${urls.getForLookupPath('/mods/admin/login.js')}"></script>

此方法應適用于支持方法調用的所有模板引擎。

下面我們來看看具體的實現效果吧,前臺訪問后html頁面顯示為:

<script src="/mods/admin/login-96d770c87905659930c9786eaa08d710.js"></script>

注意:如果你的js文件沒有修改,或者修改沒重啟,MD5的值可能不會改變,當你重啟服務后你會看到你修改過后的文件MD5也隨之改變了。

簡單看了下源代碼,MD5的計算是通過 ContentVersionStrategy 這個類實現的。此VersionStrategy實現根據資源的內容計算MD5哈希值,并將其附加到文件名后面,也就是你不改變內容MD5值是不會變的哦,一度讓我以為這種方法有BUG(。•ˇ‸ˇ•。)。

第二種、版本號實現

同樣在application.yml或者application.properties中增加配置文件

spring: 
 resources:
 chain:
  strategy:
  fixed:
   enabled: true
   paths: /mods/admin/*.js
   version: 20181128

后續操作同上,此時我們看下頁面顯示的效果:

<script src="/20181128/mods/admin/login.js"></script>

在文件路徑的最前面增加了版本號,當我們每次修改只需要更新版本號的設置,客戶端就會自動請求最新的數據了。

同樣的看了下此VersionStrategy的實現是FixedVersionStrategy類,來使固定版本字符串作為資源路徑的前綴。

總結

相比其他方式的靜態資源控制,這種方式是我目前發現最簡便的了,尤其是在SpringBoot項目中的使用。在這兩種方式中,我更傾向于方法一的MD5方式,可以讓我們不必太過于關注靜態資源問題。當然上述講的兩個實現類,在傳統SpringMVC項目中也是有的,所以傳統項目也是可以使用的,具體的使用方法大家可以研究研究。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔江区| 信宜市| 仁怀市| 梅州市| 噶尔县| 静海县| 五家渠市| 酒泉市| 丰城市| 土默特左旗| 巴林右旗| 叶城县| 安溪县| 米泉市| 谷城县| 广宗县| 远安县| 玛曲县| 克山县| 浙江省| 老河口市| 册亨县| 安新县| 根河市| 海安县| 商城县| 神农架林区| 麻栗坡县| 紫阳县| 皋兰县| 绵阳市| 巫溪县| 分宜县| 怀仁县| 墨脱县| 韶山市| 平邑县| 徐水县| 金溪县| 垦利县| 类乌齐县|