一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot2.0實現靜態資源版本控制詳解

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

2021-06-18 13:34小賣鋪的老爺爺 Java教程

這篇文章主要給大家介紹了關于Spring Boot2.0實現靜態資源版本控制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

寫在最前面

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

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

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

第一種、md5實現

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

?
1
2
3
4
5
6
7
spring:
 resources:
 chain:
  strategy:
  content:
   enabled: true
   paths: /**

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

?
1
<script th:src="${@mvcresourceurlprovider.getforlookuppath('/mods/admin/login.js')}"></script>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
@controlleradvice
public class controllerconfig {
 
 @autowired
 resourceurlprovider resourceurlprovider;
 
 @modelattribute("urls")
 public resourceurlprovider urls() {
  return this.resourceurlprovider;
 }
 
}

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

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

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

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

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

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

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

第二種、版本號實現

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

?
1
2
3
4
5
6
7
8
spring:
 resources:
 chain:
  strategy:
  fixed:
   enabled: true
   paths: /mods/admin/*.js
   version: 20181128

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

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

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

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

總結

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

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

原文鏈接:https://www.cnblogs.com/laoyeye/p/10034617.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品视频2020 | 国产日韩免费视频 | 黑人破中国女人处 | 奇米网7777| 99爱在线精品视频免费观看9 | 成人性爱视频在线观看 | 欧美区视频 | 波多野结衣 在线播放 | 欧美大奶艳星 | 吃胸膜奶视频456 | 国色天香论坛社区在线视频 | 午夜小视频免费观看 | 九九99热久久精品在线6 | 欧美一区二区三区四区在线观看 | 校园纯肉H教室第一次 | 无限资源在线观看完整版免费下载 | 精品一区二区三区视频 | 亚洲天堂网站 | 国产成人一区二区三区 | 草莓在线| yy6080午夜国产免费福利 | 日本免费的一级绿象 | 天美传媒tm0087 | 日产乱码卡1卡2卡三卡四在线 | 乌克兰粉嫩摘花第一次 | 波多野结衣xxxxx在线播放 | blacked最大的吊 | 欧美大奶艳星 | 拍拍叫痛的无挡视频免费 | 国产日产在线观看 | 99国产精品热久久久久久夜夜嗨 | 国产成人激情视频 | 国产精品免费精品自在线观看 | 韩日一区二区三区 | 无码毛片内射白浆视频 | 日本激情在线 | 午夜dj影院在线视频观看完整 | 欧美一级片免费看 | 亚洲欧美日韩中文字幕网址 | 美女奶口隐私免费视频网站 | 日本不卡免费新一二三区 |