Java/SpringMVC/Maven项目的缓存破坏机制

Posted

技术标签:

【中文标题】Java/SpringMVC/Maven项目的缓存破坏机制【英文标题】:Cache busting mechanism for Java/SpringMVC/Maven project 【发布时间】:2015-01-08 06:08:02 【问题描述】:

关于我正在使用的应用程序的一些背景知识:Spring MVC、Java EE Web 应用程序、Maven。

基本上,我正在寻找一种在每次部署应用程序时刷新所有 JS 和 CSS 文件的机制。就目前而言,应用程序正在引用静态文件(例如“js/app.js”)。每次这个文件有变化,在本地重新部署后,我们在浏览器去下载的时候得到一个304(文件没有被修改过)。我的问题是:

1) 在重新部署应用程序时再次提供这些文件并使用应用程序版本作为缓存破坏机制(例如“js/v1.0.0/app.js”)会更好吗?这可以通过 servlet 过滤器来完成。

2) 由于该项目是一个 Maven 动态 Web 项目,是否有某种插件可以做这种事情。我正在查看 wro4j 是否可以做到这一点,但从我读到的很少内容来看,它主要用于处理这些 JS 和 CSS 的缩小,这也非常有用。

哪种方法是正确的?提前致谢

【问题讨论】:

您能像 Drupal 等 CMS' 的常见做法那样使用查询字符串吗?示例 URL:path/to/file.js?123456 下次部署后的示例 URL:path/to/file.js?123456?[UNIX TIMESTAMP/RANDOM STRING/SOME VAR] 现在有同样的要求。你最后做了什么@Kruiz 我已经使用 Microsoft 堆栈很长时间了。由于我正在使用 Java、Spring 和 Tomcat 堆栈,因此我有兴趣找出捆绑、缩小和缓存破坏的最佳实践。我知道这是一个旧帖子,但你能分享你的发现吗?谢谢! -V 【参考方案1】:

我不知道“正确”的方法,但最常见的解决方案是使用静态文件的版本控制,例如 app.js 将变为 app-14gd54646rfw3.js 该数字通常是内容的 MD5,因此它将仅在文件更改时更改

使用 spring,您可以通过以下链接中所述的内置机制来实现它 http://www.baeldung.com/cachable-static-assets-with-spring-mvc

如果您想使用具有连接和缩小功能的 Maven 插件,您可以使用 gulp 或 grunt 任务作为构建工具

您可以在此处找到更多信息 https://css-tricks.com/strategies-for-cache-busting-css/

【讨论】:

【参考方案2】:

您应该向静态资源添加版本或禁用浏览器中的缓存

【讨论】:

禁用缓存对用户并不友好。

以上是关于Java/SpringMVC/Maven项目的缓存破坏机制的主要内容,如果未能解决你的问题,请参考以下文章

清除JavaWeb项目缓存的有效方式

清除JavaWeb项目缓存的有效方式

清除JavaWeb项目缓存的有效方式

企业项目开发--分布式缓存Redis

缓存策略在项目中的运用

企业项目开发--分布式缓存Redis