thymeleaf随机数_SpringBoot2.0实现静态资源版本控制
写在最前面
犹记毕业第一年时,公司每次发布完成后,都会在一个群里通知【版本更新,各部门清理缓存,有问题及时反馈】之类的话。归根结底就是资源缓存的问题,浏览器会将请求到的静态资源,如JS、CSS等文件缓存到用户本地,当用户再次访问时就不需要再次请求这些资源了,以此也是提升了用户体验。但是也正是因为这些资源缓存,导致客户端的静态文件往往不是当前最新版本。后来有同事增加了时间戳、随机数等,确实这也解决了客户端缓存的问题,但是却又带来了新的麻烦,导致每次访问都要请求服务器,无形中增加了服务器的压力。
那么有什么办法可以让客户端当需要更新时才去请求,不需更新就不请求吗?当然有,实现方式很多种,像前端实现,webjars实现等都可以,但是麻烦还是麻烦,太烧脑。介绍一种Spring自身提供的方式,也是我目前所应用的方式,ResourceUrlProvider。
ResourceUrlProvider的实现效果有两种,大家可以在后文中看到。
第一种、MD5实现
首先在application.yml或者application.properties中增加配置文件
spring:
resources:
chain:
strategy:
content:
enabled: true
paths: /**
其次,如果您恰巧和我一样使用Thymeleaf作为模板引擎,则可以和我一样使用@bean语法直接从模板访问ResourceUrlProviderbean。
如果您使用的模板引擎无法直接访问Spring bean,则可以将ResourceUrlProvider添加到Spring中。使用ControllerAdvice,代码如下:
@ControllerAdvicepublic classControllerConfig {
@Autowired
ResourceUrlProvider resourceUrlProvider;
@ModelAttribute("urls")publicResourceUrlProvider urls() {return this.resourceUrlProvider;
}
}
然后在页面上通过下述代码引用:
此方法应适用于支持方法调用的所有模板引擎。
下面我们来看看具体的实现效果吧,前台访问后html页面显示为:
注意:如果你的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
后续操作同上,此时我们看下页面显示的效果:
在文件路径的最前面增加了版本号,当我们每次修改只需要更新版本号的设置,客户端就会自动请求最新的数据了。
同样的看了下此VersionStrategy的实现是FixedVersionStrategy类,来使固定版本字符串作为资源路径的前缀。
总结
相比其他方式的静态资源控制,这种方式是我目前发现最简便的了,尤其是在SpringBoot项目中的使用。在这两种方式中,我更倾向于方法一的MD5方式,可以让我们不必太过于关注静态资源问题。当然上述讲的两个实现类,在传统SpringMVC项目中也是有的,所以传统项目也是可以使用的,具体的使用方法大家可以研究研究。
随笔小记,喜欢帮忙点个赞吧。实现思路来自Michael Scharhag:https://www.mscharhag.com/spring/resource-versioning-with-spring-mvc
thymeleaf随机数_SpringBoot2.0实现静态资源版本控制相关推荐
- SpringBoot2.0实现静态资源版本控制
写在最前面 犹记毕业第一年时,公司每次发布完成后,都会在一个群里通知[版本更新,各部门清理缓存,有问题及时反馈]之类的话.归根结底就是资源缓存的问题,浏览器会将请求到的静态资源,如JS.CSS等文件缓 ...
- 关于thymeleaf配置语法运用 以及 静态资源问题总结 2021-06-08
在使用springBoot的时候一般用templates的包来放置静态资源,对于这个包来说它很特殊,这个包它需要导入thymeleaf的依赖才可以用它来和前后端做交互,下面将介绍一下它的使用方法: 导 ...
- thymeleaf引用图片_SpringBoot访问静态资源(图片、html)以及整合thymeleaf 注意点
static和templates 是springboot默认创建的文件夹,static中放静态页面,而templates中放动态页面 存放在static目录下,浏览器可以直接访问 http://loc ...
- 浏览器无法加载网页静态资源
浏览器打开网页一直报错Resource interpreted as Document but transferred with MIME type application/json,以及疯狂报错Un ...
- nginx ruoyi 配置静态资源服务
前言 nginx version: nginx/1.18.0 CentOS Linux release 7.6.1810 (Core) ruoyi 4.6.0 需求 静态资源目录:/data/ruoy ...
- Spring Boot第八篇-关于web静态资源的整合
1.环境:JDK+idea+spring boot2.63 2.打开spring-factories(相关介绍见第七篇) 找到WebMvc的自动配置文件,打开见源码... 源码中有一个addResou ...
- Thymeleaf——访问静态资源(static)解决方案
官方文档 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#server-root-relative-urls 解决方案 ...
- Spring Boot和Thymeleaf:重新加载模板和静态资源,而无需重新启动应用程序
Thymeleaf是围绕自然模板的概念设计的,该模板允许进行静态原型制作:模板逻辑不会影响用作原型的模板. 尽管这是一项很棒的技术,但您可能还希望在运行的Spring Boot应用程序中查看结果,而不 ...
- SpringBoot整合Thymeleaf模板引擎以及静态资源的访问
SpringBoot整合Thymeleaf模板引擎静态资源访问的配置 Thymeleaf是一个现代服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CS ...
最新文章
- 实战|基于图割算法的木材表面缺陷图像分析
- 查看Unix/Linux的CPU个数和内存大小,系统位数(转载)
- c语言指向常量的指针和常量指针
- 译:9.使用Redis进行消息传递
- java 接口强制转换_三分钟学习Java泛型中T、E、K、V、?的含义
- 三种传递gRPC动态参数方式的使用体验
- caffe安装_【开源框架】caffe图像分类从模型自定义到测试
- 【Python 04】Python开发环境概述
- 一维稳态导热的数值计算c语言,传热传质上机实习题(参考资料C语言)
- ERROR: function group_concat(character varying) does not exist
- 深入了解基于容器的红帽PaaS和OpenShift
- 指纹识别算法c++实现
- HP服务器raid卡型号b110i安装2008R2认不到硬盘缺少硬盘驱动
- js 金额格式化 和 转成人民币大写金额形式
- 小窍门:简历邮箱格式的正确写法,个人简历怎么发送到邮箱?
- 4个工具,个个都是精品!修复图片视频画质超好用
- 微信支付异常(“应答的微信支付签名验证失败“)记录
- 【安卓学习之第三方库】 人脸识别SDK
- 骨头镇 BoneTown 破解+菜单汉化补丁
- qrcode.js 生成二维码包含logo和背景图片及IE下载二维码
热门文章
- 【JavaScript】关于delete
- Android上传文件至服务器
- Cannot get a connection, pool error Timeout waiting for idle object (获取不到数据库连接)...
- 决定你是富人还是穷人的12条定律
- jsp 中select 下拉选择框 el 三元运算符 如何选中与不选中
- python解压缩gz文件_使用python解压缩.gz文件的一部分
- 一致性hash算法虚拟节点_一致性 Hash 算法
- linux 取消nologin_Linux中nologin的应用 转
- ae在哪里直接复制合成_AE模板里修改复制的合成如何不影响原先的合成?
- python实现表格_Python 自由定制表格的实现示例