Spring Boot 自动加载 application.properties 机制详解
1. 默认加载行为
• 文件类型:自动加载 application.properties 或 application.yml。
• 加载路径(优先级从高到低):
- 项目根目录下的
/config子目录。 - 项目根目录(直接放置文件,如
src/main/resources编译后到classpath根目录)。 classpath下的/config目录。- 其他内置路径(如环境变量指定的位置)。
• 优先级规则:路径越靠前,配置优先级越高(例如,外部/config目录的配置会覆盖classpath根目录的配置)。
2. 配置加载顺序
后加载的配置会覆盖先加载的配置,顺序如下:
- 默认配置:
application.properties。 - Profile 专属配置:如
application-dev.properties(需通过spring.profiles.active=dev激活)。 - 命令行参数:
java -jar app.jar --server.port=8081。 - 环境变量:如设置
SERVER_PORT=8081。 - 外部化配置:通过
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. 示例验证
• 场景:验证不同路径下的配置优先级。
• 步骤:
- 在
src/main/resources/application.properties中设置:propertiesserver.port=8080 - 在项目根目录新建
/config文件夹,并创建application.properties:propertiesserver.port=8081
• 结果:应用启动时端口为 8081(外部 /config 目录优先级更高)。
5. 常见问题排查
• 配置未生效的可能原因:
• 文件未放在正确路径(如未在 src/main/resources)。
• 文件名拼写错误(如 apllication.properties)。
• 被更高优先级配置覆盖(如命令行参数)。
• 未正确激活 Profile(如忘记 spring.profiles.active=prod)。
6. 总结
• Spring Boot 通过自动加载 application.properties 实现“约定优于配置”。
• 掌握优先级规则可灵活管理多环境配置(开发、测试、生产)。
• 高级需求可通过 spring.config.name 和 spring.config.location 扩展。
附:核心配置优先级口诀
外 > 内,命 > 默,动 > 静。
(外部路径 > 内部路径;命令行/环境变量 > 默认配置;动态配置 > 静态文件)
好处
Spring Boot 的确可以让你通过配置文件直接集成和配置第三方包,减少了大量的代码配置工作。不过,在某些复杂场景下,可能仍然需要编写一些代码来实现特定的功能或自定义配置。总体来说,Spring Boot 的设计理念是“约定优于配置”,使得开发变得更加简单和高效。