使用内容版本策略时在Spring中缓存清除@import CSS

时间:2019-05-02 20:53:53

标签: html css spring spring-boot caching

我遵循this tutorial在春季针对静态资产使用内容版本策略。一切都按预期工作,但有一个我不知道如何解决的特殊情况:

我的HTML对css文件<link>具有a.css。如果查看服务器返回的html,则可以看到该链接已转换为a-(md5).css。我的问题是a.css导入了b.css。 Spring还可以将导入从@import '/css/b.css'正确地更新到@import '/css/b-(md5).css',当我更新b.css时出现问题。由于a.css的md5相同(@import是静态名称),因此浏览器正在缓存a-(md5).css的请求,该请求仍指向已解析的b-(old-md5).css,我结束样式错误

这听起来像是一个常见问题。如何解决?
是否有可能告诉版本策略在解析链接后计算 ,以便如果依赖项的md5更改了,依赖项的md5也会更改吗?

这是我的配置

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //content-based versioning and max caching
    registry.addResourceHandler("/**")
            .addResourceLocations("classpath:/static/")
            .setCacheControl(MAX_CACHE_DURATION)
            .resourceChain(false)
            .addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"))
            .addTransformer(new CssLinkResourceTransformer());

    //no cache
    registry.addResourceHandler("/*.html").setCacheControl(CacheControl.noCache());
}

1 个答案:

答案 0 :(得分:0)

我找不到彻底解决此问题的方法。我的解决方法是禁用所有CSS的缓存

        registry.addResourceHandler("/ui/css/**")
            .addResourceLocations("classpath:/static/css/")
            .setCacheControl(CacheControl.noCache())
            .resourceChain(false)
            .addResolver(new VersionResourceResolver());