Java Spring MVC+;Thymeleaf:对静态资源的更新

Java Spring MVC+;Thymeleaf:对静态资源的更新,java,spring,caching,spring-mvc,thymeleaf,Java,Spring,Caching,Spring Mvc,Thymeleaf,我的SpringMVC/Thymeleaf应用程序遇到了一个问题,当我发布一个包含静态资源(图像、CSS文件、JavaScript库)更改的更新时,用户会遇到错误。出现问题是因为他们的浏览器缓存中有旧版本的资源,所以如果他们强制刷新,问题就会消失,但大多数用户不知道该怎么做 在过去,我已经在其他框架中解决了这个问题,方法是让我的构建将构建号注入到Springbean中,并定制URL构建机制以在URL中包含构建号。结合将这些资源上的缓存控制响应头设置为遥远的未来日期,可以确保只要用户的浏览器缓存中

我的SpringMVC/Thymeleaf应用程序遇到了一个问题,当我发布一个包含静态资源(图像、CSS文件、JavaScript库)更改的更新时,用户会遇到错误。出现问题是因为他们的浏览器缓存中有旧版本的资源,所以如果他们强制刷新,问题就会消失,但大多数用户不知道该怎么做

在过去,我已经在其他框架中解决了这个问题,方法是让我的构建将构建号注入到Springbean中,并定制URL构建机制以在URL中包含构建号。结合将这些资源上的缓存控制响应头设置为遥远的未来日期,可以确保只要用户的浏览器缓存中有资源,就永远不会重新获取,除非我发布新版本


Spring MVC/Thymeleaf是否有解决此问题的内置方法?如果没有,我如何覆盖Thymeleaf中的URL写入机制,以便添加上面描述的行为?

一个解决方案可以是编写自己的方言并定义自己的helper sr。然后您可以编写
@{sr(yoururl)}
。你可以找到关于自己写作的信息

“至于创建自己的实用程序对象,可以通过创建一个实现
IExpressionHancingDialect
接口的简单方言来完成。这将使Thymeleaf将实现
getAdditionalExpressionObjects()
方法返回的任何对象添加到处理上下文中。”

在方言中,您可以定义硬编码的buildnr

另一种方法是将buildnr始终添加到模型中,然后您可以编写
@{yoururl(buildnr=${buildnr})}

或者最好将其放入消息源中,并使用
@{yoururl(buildnr={buildnr}}