在spring boot中为静态资源设置setCachePeriod

时间:2016-04-25 08:28:03

标签: java spring spring-boot

我正在使用spring boot,/static作为静态资源(如js和css)提供,到目前为止一直很好,而我想设置这些文件的缓存头,所以我尝试了这个:

@Configuration
public class BaseMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/").setCachePeriod(24 * 3600 * 365); 
    }
}

然而,在此之后,应用程序无法提供/static文件夹中的任何内容。

问题是什么?

3 个答案:

答案 0 :(得分:11)

在我看来,最好使用spring.resources.cache-period属性来设置默认Boot 资源处理程序的缓存时间。请将以下内容添加到application.properties

spring.resources.cache-period = 31536000

并删除BaseMvcConfig配置文件。

答案 1 :(得分:1)

如果要对控制器使用spring security,为静态内容使用setup cache,那么您可能希望在WebSecurityConfigurerAdapter中配置异常并在application.properties中设置缓存周期:

@Override 
public void configure(WebSecurity web) throws Exception { 
   web.ignoring().antMatchers("/js/**", "/css/**");
} 

#1 week cache
spring.resources.cache-period = 604800

答案 2 :(得分:0)

由于不推荐使用spring.resources.cache-period,因此您可能想使用较新的spring.resources.cache.period,这可能需要花费几秒钟(和以前一样)或类似这样的Duration规范:

spring.resources.cache.period = P30D

有关参考,请参见Duration#parse() JavaDoc。