Skip to content

Spring Boot 自动加载 application.properties 机制详解


1. 默认加载行为

文件类型:自动加载 application.propertiesapplication.yml
加载路径(优先级从高到低):

  1. 项目根目录下的 /config 子目录。
  2. 项目根目录(直接放置文件,如 src/main/resources 编译后到 classpath 根目录)。
  3. classpath 下的 /config 目录。
  4. 其他内置路径(如环境变量指定的位置)。
    优先级规则路径越靠前,配置优先级越高(例如,外部 /config 目录的配置会覆盖 classpath 根目录的配置)。

2. 配置加载顺序

后加载的配置会覆盖先加载的配置,顺序如下:

  1. 默认配置application.properties
  2. Profile 专属配置:如 application-dev.properties(需通过 spring.profiles.active=dev 激活)。
  3. 命令行参数java -jar app.jar --server.port=8081
  4. 环境变量:如设置 SERVER_PORT=8081
  5. 外部化配置:通过 spring.config.location 指定外部路径。

3. 自定义配置文件

修改配置文件名

properties
# 使用 myconfig.properties 代替默认文件
spring.config.name=myconfig

指定外部路径

bash
# 加载类路径下的 custom-config 目录和当前目录的 config 文件夹
java -jar app.jar --spring.config.location=classpath:/custom-config/,file:./config/

4. 示例验证

场景:验证不同路径下的配置优先级。
步骤

  1. src/main/resources/application.properties 中设置:
    properties
    server.port=8080
  2. 在项目根目录新建 /config 文件夹,并创建 application.properties
    properties
    server.port=8081

结果:应用启动时端口为 8081(外部 /config 目录优先级更高)。


5. 常见问题排查

配置未生效的可能原因
• 文件未放在正确路径(如未在 src/main/resources)。
• 文件名拼写错误(如 apllication.properties)。
• 被更高优先级配置覆盖(如命令行参数)。
• 未正确激活 Profile(如忘记 spring.profiles.active=prod)。


6. 总结

• Spring Boot 通过自动加载 application.properties 实现“约定优于配置”。
• 掌握优先级规则可灵活管理多环境配置(开发、测试、生产)。
• 高级需求可通过 spring.config.namespring.config.location 扩展。


附:核心配置优先级口诀
外 > 内,命 > 默,动 > 静。
(外部路径 > 内部路径;命令行/环境变量 > 默认配置;动态配置 > 静态文件)

好处

Spring Boot 的确可以让你通过配置文件直接集成和配置第三方包,减少了大量的代码配置工作。不过,在某些复杂场景下,可能仍然需要编写一些代码来实现特定的功能或自定义配置。总体来说,Spring Boot 的设计理念是“约定优于配置”,使得开发变得更加简单和高效。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer