springboot+thymeleaf对静态资源环境进行缓存

参考文章:http://www.jb51.net/article/135626.htm

https://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/ 

在appplication.properties中添加配置:

#20180420 add  spring boot static resoources cache and version configuration 
#缓存时间,单位为秒
spring.resources.cache-period=604800

优化目的是达到了,但是有一个小问题没有解决,就是如果我的资源文件变了,比如css文件有修改,当我服务端发布之后,用户这边还是会存在缓存。

最好的效果时当文件有改变时或者说当服务端的程序重启之后,用户的请求需要下载服务端的最新资源,没有重启的时候就用缓存的内容,这样就能保证更改后用户能够马上看到最新的内容。

我们可以用版本号来解决这个问题,就是在静态资源后面加上一个版本号,当资源发生变化时将版本号也改变,这样就不会有问题了。

代码如下:

<script type="text/javascript" th:src="@{/js/main/main.js(version=${session.version})}"></script>

用法很简单,关键是version这个值从哪来呢?

我们可以在启动前通过代码设置这个值:

System.setProperty("version", version);
这个值可以通过main方法的args传进来,在启动项目的脚本中动态传到程序中,启动脚本可以获取程序jar的MD5值作为版本号,这样当服务端的程序重启之后,版本号就变了,缓存就失效了。

然后在过滤器中获取这个值设置到request中就可以在每个页面中使用了

HttpSession sessionInstance = request.getSession();

 //20180420 add 用于控制静态资源版本
String staticVersion = System.getProperty("version");
sessionInstance.setAttribute("version", staticVersion == null?"1.0.0" : staticVersion);
 logger.info("staticVersion: " + staticVersion);
除了这种参数传递的方式,大家还可以通过自定义打包的插件,在打包的时候将version替换成具体的内容也可以。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值