春天缩小脚本缓存与百里香

时间:2017-04-30 16:44:56

标签: javascript spring caching thymeleaf

我正在尝试配置springboot app。使用config类来缓存javascript文件的缩小版本。

配置类:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        VersionResourceResolver versionResourceResolver = new VersionResourceResolver()
                .addVersionStrategy(new ContentVersionStrategy(), "/**");

        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        registry.addResourceHandler("/images/**").addResourceLocations("classpath:/static/images/");
        registry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/static/js/")
                .setCachePeriod(60 * 60 * 24 * 7).resourceChain(true).addResolver(versionResourceResolver);
    }
}

HTML:

<head>
..
<script th:src="${@mvcResourceUrlProvider.getForLookupPath('/js/user.min.js')}" />
..
</head>

Spring应该发送一个带有缓存参数的cookie,但它没有,但是如果我使用 user.js 的非缩小版本,那么浏览器会成功缓存它:

<head>
 ..
 <script th:src="${@mvcResourceUrlProvider.getForLookupPath('/js/user.js')}" />
 ..
</head>

js资源文件在src / main / resources / static / js文件夹下彼此相邻。无论是否缓存,它们都能正常工作。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

奇怪的是,解决方案非常简单....而不是

.setCachePeriod(60 * 60 * 24 * 7)

我必须使用(带一点重构):

.setCacheControl(CacheControl.maxAge(7, TimeUnit.DAYS)).resourceChain(true)
                .addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));