Spring Boot 3+Thymeleaf静态资源缓存配置问题求助
解决Spring Boot 3 + Thymeleaf静态资源缓存配置问题
问题原因分析
添加@EnableWebMvc+@Configuration导致404:
@EnableWebMvc会完全接管Spring MVC的配置,禁用Spring Boot默认的WebMvc自动配置(包括静态资源的默认映射规则)。你的配置中addResourceLocations使用的是/resources/js/这类Servlet上下文路径,而非类路径前缀classpath:,Spring无法找到实际存放的静态资源,因此返回404。仅用@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
相关产品推荐
相关产品推荐

