java - 使用 ContentVersionStrategy 的 Spring Boot 缓存

标签 java spring spring-mvc caching spring-boot

我在一个 Web 项目中使用 Spring Boot,并且我想使用静态内容缓存功能。

在 application.properties 中使用 ContentVersionStrategy 和以下配置

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

以及 Thymeleaf html 中的此类资源

<script src="@{/js/app.js}"></script>

我将 MD5 哈希值附加到文件名中,但如果我对该文件进行更改,内容会发生变化,但哈希值仍然相同。

如果文件内容发生更改,使哈希值在每个请求上“重新加载”的唯一方法是设置:

spring.resources.chain.cache=false

但我认为这忽略了使用这个 Spring 功能的意义。 这是正常行为吗?

Spring 文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content

最佳答案

这是正常行为。

在生产环境中,您希望缓存查找。但在开发过程中,您可能不会(如果您反复编辑 JavaScript 文件)。

设置 spring.resources.chain.cache=true 将创建一个 ResourceResolver 实现链,其中的 CachingResourceResolver 将委托(delegate)给该链ResourceResolvers,并缓存结果。

关于java - 使用 ContentVersionStrategy 的 Spring Boot 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553556/

相关文章:

java - java中服务器关闭连接端后消息才被客户端读取

spring - Redis 中的并发用于分布式系统中的闪购

spring - 在 Spring 中对下载的文件进行编码

xml - 从 XML 到 XML 文档的 XSLT 转换

java - Spring boot + angular 2 Heroku部署

testing - 是否可以使用 Springs MockMvc 测试 Portlet Controller ?

java - MVC GET Controller ,带有 . PathVariable 中的 [dot] 值

java - 使用 JNI 将字符串从 Java 传递到 C++

java - 数组字符串方法返回多个字符串方法

java - JPMS/Project Jigsaw 对小型应用程序/库的好处