【springboot入门-静态资源与配置文件原理】

静态资源

  1. 默认静态资源目录
  • Spring Boot默认将以下目录作为静态资源目录,并且可以直接访问其中的资源:

    • classpath:/META-INF/resources/
    • classpath:/resources/
    • classpath:/static/
    • classpath:/public/
    • ${user.dir}/public/(程序运行目录下的public目录)
      这些目录的优先级从上到下,当多个静态资源目录中出现同名文件时,越靠上的目录权重越高。
  1. 静态资源的处理
  • 静态资源的处理类是ResourceHttpRequestHandler,它会正确地处理资源的Last-Modified响应和Range请求。
  1. 静态资源和RequestMapping冲突
  1. 默认主页
  • 静态资源根目录中的index.html会被当做应用默认的主页。这意味着创建Spring Boot应用后不需要创建Controller,就可以快速地开发一个应用主页。
  1. 自定义静态资源目录
  • 有两种方式自定义静态资源目录:配置文件和配置类。

    1. 在配置文件中配置静态资源目录
    xml 复制代码
    # 静态资源的访问路径
    spring.mvc.static-path-pattern=/**
    # 静态资源的目录
    spring.web.resources.static-locations[0]=classpath:/public/
    spring.mvc.static-path-pattern指定了静态资源的访问路径,默认为/**,也就是没有前缀。你可以专门为静态资源配置一个访问路径,如:spring.mvc.static-path-pattern=/static/**。
    1. 通过WebMvcConfigurer配置静态资源目录
      通过WebMvcConfigurer配置接口的addResourceHandlers方法,可以编程式地配置静态资源访问路径和静态资源目录:
java 复制代码
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 静态资源访问路径
        registry.addResourceHandler("/**")
        // classpath下的静态资源目录
        .addResourceLocations("classpath:/public/")
        // 本地磁盘下的静态资源目录
        .addResourceLocations("file:D:\\upload\\");
    }
}

这种方式不支持使用${}表达式。

  1. 原理分析

Spring Boot在启动时会加载许多自动配置类,其中WebMvcAutoConfiguration类负责Spring MVC的大部分自动配置。这个类中的WebMvcAutoConfigurationAdapter静态内部类是一个配置类,它将配置文件的属性与WebMvcProperties、ResourceProperties和WebProperties等类进行绑定。

通过分析WebMvcAutoConfigurationAdapter的源码,我们可以了解到静态资源的默认配置规则,以及如何通过编程方式自定义这些规则。例如,可以通过设置add-mappings属性为false来禁用默认的静态资源路径映射,从而自定义静态资源的访问路径和目录。

参考官网

配置文件加载优先级

  1. 命令行参数
    命令行参数具有最高的优先级,它们可以覆盖任何其他配置文件中的设置。例如,通过 --spring.config.location 参数可以指定配置文件的位置
  2. bootstrap配置文件
    bootstrap配置文件用于基础设置和安全配置,它们在应用程序启动时最早被加载。bootstrap配置文件的加载顺序如下:
    • bootstrap.yaml
    • bootstrap.properties
    • bootstrap-{profile}.yaml
    • bootstrap-{profile}.properties
  3. 主配置文件
    主配置文件application.yaml或application.properties在bootstrap配置文件之后加载。
  4. Profile特定的配置文件
    如果定义了激活的profile,Spring Boot会加载与该profile相关的配置文件,例如application-dev.yaml或application-dev.properties。
  5. 外部配置文件
    Spring Boot也可以从外部位置加载配置文件,例如通过--spring.config.location指定的文件或目录
  6. 配置文件的位置
    Spring Boot会在以下位置加载配置文件,按照以下顺序:
    • 文件系统下的/config子目录。
    • 文件系统当前目录。
    • 类路径下的/config包。
    • 类路径根目录。 这些位置的配置文件会被按照上述顺序加载,高优先级的配置会覆盖低优先级的配置
  7. 配置文件的格式优先级
    如果存在同名的配置项,.properties文件中的配置项会覆盖.yaml或.yml文件中的配置项
  8. 环境变量和系统属性
    环境变量和系统属性也会影响配置,但它们的优先级低于命令行参数和配置文件
  9. @PropertySource注解
    通过@PropertySource注解指定的配置文件具有特定的优先级,可以在配置文件中定义额外的配置源
java 复制代码
@Configuration
@PropertySource(value = "classpath:/app-config.properties", encoding = "UTF-8")
public class AppConfig {
    // 这个类可以包含 Bean 定义或其他配置
}
相关推荐
Apifox12 分钟前
Apifox 7 月更新|通过 AI 命名参数及检测接口规范、在线文档支持自定义 CSS 和 JavaScript、鉴权能力升级
前端·后端·测试
码界筑梦坊12 分钟前
169-Django二手交易校园购物系统开发分享
后端·python·django·毕业设计·conda
2301_8095615216 分钟前
c++day5
java·c++·面试
专注VB编程开发20年17 分钟前
在VS2022中调试ASP.NET项目时修改DLL或ASPX动态页面的原理及实现方法
后端·云计算·asp.net
CodeSheep19 分钟前
这个老爷子研究的神奇算法,影响了全世界!
前端·后端·程序员
这里有鱼汤25 分钟前
从0到1打造一套小白也能跑得起来的量化框架[图文教程]
后端·python
青云交1 小时前
「源力觉醒 创作者计划」_文心大模型 4.5 开源 28 天:从车间轴承到山村课堂的 AI 突围
java·模型微调·工业质检·文心 4.5·开源 ai·中小企业 ai·乡村教育
正在走向自律1 小时前
企业微信API接口发消息实战:从0到1的技术突破之旅
java·数据库·企业微信·accesstoken·agentid·corpid·企业微信发消息
Ice__Cai1 小时前
Django 视图详解(View):处理请求与返回响应的核心
数据库·后端·python·django·pip
江湖十年1 小时前
Go 官方推荐的 Go 项目文件组织方式
后端·面试·go