spring boot静态资源路径配置主要有两种方式:一是通过application.yml配置spring.mvc.static-path-pattern和spring.web.resources.static-locations,实现url匹配规则与资源位置的统一管理;二是通过实现webmvcconfigurer接口的java配置类,调用addresourcehandler/addresourcelocations灵活映射外部路径或自定义url前缀,支持叠加且不干扰默认路径。

Spring Boot 静态资源访问路径配置主要有两种方式:通过 application.yml(或 .properties)配置项 和 Java 配置类实现 WebMvcConfigurer。核心围绕两个关键点:访问 URL 的匹配规则(前端怎么请求),以及实际资源的存放位置(后端从哪读取)。
一、用 application.yml 快速配置
适合统一管理默认静态资源路径,或只需简单扩展目录场景。
-
修改访问前缀(可选):默认是
/**,即直接访问/logo.png;若想限定为/static/**,加这行:
- 指定资源查找位置(重点):覆盖或追加默认路径,支持 classpath 和 file 系统路径:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
- file:/opt/uploads/
⚠️ 注意:file: 路径末尾必须带斜杠(如 file:/opt/uploads/),否则无法识别;多个路径用逗号分隔,优先级从左到右递减。
二、用 @Configuration 类灵活映射
适合需要将外部磁盘路径(如用户上传文件)、非 classpath 目录单独挂载为特定 URL 的场景,比如把 D:/images/ 映射成 /img/**。
- 新建配置类,实现
WebMvcConfigurer接口:
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 将 /img/** 请求指向 D:/images/ 下的文件
registry.addResourceHandler("/img/**")
.addResourceLocations("file:D:/images/");
// 可同时配置多个映射
registry.addResourceHandler("/assets/**")
.addResourceLocations("classpath:/static/assets/");
}
}
✅ 这种方式不干扰默认路径,可叠加;URL 和物理路径一一对应,逻辑清晰,调试友好。
三、默认静态资源目录与优先级
即使不配置,Spring Boot 也会自动扫描以下 classpath 目录(按顺序查找,找到即停):
META-INF/resources/resources/-
static/(最常用) public/
例如在 src/main/resources/static/logo.png 放一张图,启动后直接访问 http://localhost:8080/logo.png 即可——无需任何额外配置。
四、常见问题提醒
- 配置了
spring.web.resources.static-locations后,**默认路径会被完全替换**,不是追加;如需保留默认路径,必须手动写全(参考上文 yml 示例) - 使用
file:映射时,Linux/Windows 路径要写对,且应用需有该目录的读取权限 - 打包成 jar 后,
file:路径仍有效,但classpath:中的目录会随 jar 打包固化,不适合存用户上传内容 - 如果用了 Spring Security,记得放行静态资源路径,例如
permitAll().requestMatchers("/img/**", "/static/**")











