Spring Boot 加载配置文件的优先级是根据不同的位置和命名规则来确定的。下面按照优先级从高到低的顺序来介绍:
- 命令行参数:通过命令行参数指定的配置会覆盖其他配置。例如,使用
--spring.config.name
和--spring.config.location
参数可以指定配置文件的名称和位置。 - 操作系统环境变量:Spring Boot 会自动将操作系统环境变量中以
SPRING_
开头的变量转换为配置属性。例如,将SPRING_APPLICATION_NAME
设置为myapp
,则可以在配置文件中使用${spring.application.name}
来引用该值。 - 命令行属性:可以通过
-D
参数或者--spring.config.name
和--spring.config.location
参数来指定配置文件的名称和位置。 - jar 包外部的 application.properties 或 application.yml:如果存在
config
文件夹,Spring Boot 会加载该文件夹下的application.properties
或application.yml
文件。 - jar 包内部的 application.properties 或 application.yml:如果 jar 包内部存在
application.properties
或application.yml
文件,Spring Boot 会加载该文件。 - jar 包内部的 application-{profile}.properties 或 application-{profile}.yml:如果指定了激活的 profile,Spring Boot 会加载对应的
application-{profile}.properties
或application-{profile}.yml
文件。 - jar 包外部的 application-{profile}.properties 或 application-{profile}.yml:如果存在
config
文件夹,Spring Boot 会加载该文件夹下的application-{profile}.properties
或application-{profile}.yml
文件。 - jar 包外部的 application.properties 或 application.yml:如果存在
config
文件夹,Spring Boot 会加载该文件夹下的application.properties
或application.yml
文件。
需要注意的是,Spring Boot 会按照上述顺序加载配置文件,后面加载的配置会覆盖前面加载的配置。因此,如果存在多个配置文件,可以通过优先级来控制配置的加载顺序。
另外,Spring Boot 还支持使用@PropertySource
注解来加载自定义的配置文件,可以通过value
属性指定配置文件的路径。这种方式的优先级介于 jar 包内部和 jar 包外部的配置文件之间。
总结起来,Spring Boot 加载配置文件的优先级从高到低依次为:命令行参数 > 操作系统环境变量 > 命令行属性 > jar 包外部的配置文件 > jar 包内部的配置文件 > jar 包外部的 profile 配置文件 > jar 包内部的 profile 配置文件。