You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3+Thymeleaf静态资源缓存配置问题求助

解决Spring Boot 3 + Thymeleaf静态资源缓存配置问题

问题原因分析

  1. 添加@EnableWebMvc+@Configuration导致404:
    @EnableWebMvc会完全接管Spring MVC的配置,禁用Spring Boot默认的WebMvc自动配置(包括静态资源的默认映射规则)。你的配置中addResourceLocations使用的是/resources/js/这类Servlet上下文路径,而非类路径前缀classpath:,Spring无法找到实际存放的静态资源,因此返回404。

  2. 仅用@Configuration无缓存效果:
    未正确匹配静态资源的实际存储路径,导致缓存规则未应用到目标资源上。Spring Boot默认的静态资源位置是classpath:/static/、classpath:/public/、classpath:/resources/等,若配置路径与实际存放位置不对应,缓存规则不会生效。

正确配置方案

移除@EnableWebMvc,仅保留@Configuration,并修正资源路径配置,确保匹配你的静态资源实际位置:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 假设静态资源存放在 src/main/resources/static/ 下的js、css、img文件夹
        registry.addResourceHandler("/js/**", "/css/**", "/img/**")
                .addResourceLocations("classpath:/static/js/", "classpath:/static/css/", "classpath:/static/img/")
                .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS)
                        .cachePublic()); // 允许公共缓存(如CDN)缓存资源
    }
}

关键注意事项

  • 资源路径匹配:根据实际资源存放位置调整addResourceHandler和addResourceLocations。例如:
    • 若资源存放在src/main/resources/resources/js/,则addResourceLocations应为"classpath:/resources/js/"
  • Thymeleaf引用方式:在Thymeleaf模板中使用标准资源引用语法,确保路径与配置匹配:
    <link rel="stylesheet" th:href="@{/css/style.css}">
    <script th:src="@{/js/main.js}"></script>
    <img th:src="@{/img/logo.png}" alt="Logo">
    
  • 缓存更新策略:长期缓存建议配合资源版本号(如文件名添加contenthash),避免用户在缓存过期前无法获取更新后的资源。

内容的提问来源于stack exchange,提问作者robert trudel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:43:09