参考文章: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替换成具体的内容也可以。