是的,Spring Boot 配置文件的加载优先级是一个非常重要的知识点,尤其是在需要覆盖默认配置或根据环境加载不同配置时。Spring Boot 支持多种配置文件格式(如 application.properties
和 application.yml
),并且会按照一定的优先级顺序加载这些配置文件。
1. 配置文件格式
Spring Boot 支持以下两种主要的配置文件格式:
application.properties
:键值对格式。application.yml
:YAML 格式。
2. 配置文件的加载顺序
Spring Boot 会按照以下优先级顺序加载配置文件,优先级高的配置会覆盖优先级低的配置:
- 命令行参数:
- 通过
--
传递的参数 - 优先级最高,会覆盖其他所有配置。
- 通过
SPRING_APPLICATION_JSON
环境变量:- 通过环境变量传递的 JSON 格式配置
JNDI
属性:- 从 Java 命名和目录接口(JNDI)中获取的配置。
- Java 系统属性(
System.getProperties()
):- 通过
-D
参数设置的 Java 系统属性
- 通过
- 操作系统环境变量:
- 操作系统的环境变量,例如:
export SERVER_PORT=9090
- 操作系统的环境变量,例如:
application-{profile}.properties
或application-{profile}.yml
:- 针对特定环境的配置文件,例如
application-dev.properties
或application-prod.yml
。 - 需要激活对应的 Profile(通过
spring.profiles.active
配置)。
- 针对特定环境的配置文件,例如
application.properties
或application.yml
:- 默认的配置文件,优先级较低。
@Configuration
类上的@PropertySource
注解:- 通过
@PropertySource
注解加载的配置文件
- 通过
- 默认属性(通过
SpringApplication.setDefaultProperties
设置):- 在代码中设置的默认属性。
3. Profile 的作用
Spring Boot 支持通过 Profile 来区分不同环境的配置。例如:
application-dev.properties
:开发环境配置。application-prod.properties
:生产环境配置。
可以通过以下方式激活 Profile:
- 命令行参数:
java -jar myapp.jar --spring.profiles.active=prod
- 环境变量:
export SPRING_PROFILES_ACTIVE=prod
- 配置文件:
在application.properties
或application.yml
中指定:spring.profiles.active=prod
4. 配置文件的加载位置
Spring Boot 会从以下位置加载配置文件(优先级从高到低):
- 当前目录的
/config
子目录:- 例如:
./config/application.properties
。
- 例如:
- 当前目录:
- 例如:
./application.properties
。
- 例如:
- 类路径下的
/config
目录:- 例如:
classpath:/config/application.properties
。
- 例如:
- 类路径根目录:
- 例如:
classpath:/application.properties
。
- 例如:
5. 总结
- Spring Boot 配置文件的加载优先级从高到低依次为:命令行参数 > 环境变量 > 配置文件 > 默认配置。
- 通过
Profile
可以实现不同环境的配置隔离。 - 配置文件可以从多个位置加载,优先级从高到低依次为:当前目录
/config
> 当前目录 > 类路径/config
> 类路径根目录。
在面试中,你可以结合实际场景(如多环境配置、配置覆盖等)来展示你对 Spring Boot 配置文件加载机制的理解。
THE END
暂无评论内容