Spring boot Web 实现静态资源缓存

本文介绍两种在SpringBoot项目中实现静态资源版本管理的方法:手动配置版本号和使用MD5生成版本号。前者适用于固定版本发布场景,后者适合动态更新资源版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法,手动配置版本号

首先定义一个ControllerConfig配置类将路径信息在启动的时候推到前端

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;
    }

}

Springboot在静态文件的默认处理已经指定了classpath:/resources/static

在application.properties配置文件中加入以下配置

# 资源缓存时间,单位秒
spring.resources.cache-period=604800
# 开启gzip压缩
spring.resources.chain.gzipped=true
# 启用缓存
spring.resources.chain.cache=true

spring.resources.chain.strategy.fixed.enabled=true
# Springboot在静态资源的处理上已经默认做了处理,
# 直接指定/**表示该文件夹下的所有静态资源都做缓存处理
spring.resources.chain.strategy.fixed.paths=/**
# 指定版本号,每次打包更新的时候需要变更当前版本
spring.resources.chain.strategy.fixed.version=v1.0.0

前端页面上,这样引入js和css文件

<link rel="stylesheet" href="${urls.getForLookupPath('/bootstrap/css/bootstrap.min.css')}">
<script src="${urls.getForLookupPath('/jquery/jquery.js')}"></script>

这样你启动项目后页面上就实现了缓存
可以看到页面上引用的js文件路径变成了以下方式

http://192.16.0.98:8089/v1.0.0/layer/layer.js

加上缓存配置后我们访问页面后,被加载过的静态资源就会缓存起来,第二次访问时就不会再去重新请求下载了,通过抓包可以看出确实被缓存了。

如果你在本地调试代码时需要在浏览器上打开F12
在Network的Disable cache选项上打勾禁用缓存

这个方法有一个bug,就是你引入的js文件中引用了css,css中又引用了图片,那么该图片就会找不到报404错误

比如我引入了layer.js文件,而layer.css并没有使用版本管理的方法引入
css是在js代码中引入的,而图片又是在css中引入

<script src="${urls.getForLookupPath('/layer/layer.js')}"></script>

打开layer.js代码可以看到如下

从页面上可以看出图片的文件路径变为

http://10.16.0.98:8097/v1.0.0/layer/skin/default/v1.0.0/loading-2.gif

路径不正确所以loading-2.gif文件找不到,不推荐使用这个方法

第二种方法,使用MD5生成版本号进行管理

这个方法其实和第一种方法差不多的配置
只需要把application.properties配置信息修改一下,其它地方写法不变

spring.resources.chain.strategy.fixed.enabled=true

spring.resources.chain.strategy.fixed.paths=/**

spring.resources.chain.strategy.fixed.version=v1.0.0

把这三条配置删掉,换成MD5生成就可以了

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**

可以看到引用图片正常

路径引用变成以下方式

http://192.16.0.98:8089/layer/skin/default/loading-2-50c5e3e79b276c92df6cc52caeb464f0.gif

项目不管是打包部署还是本地调试只要refresh的时候,就会产生一个新的MD5,这样客户端的资源路径就发生改变,回去服务器重新获取

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值