好的,Spring Boot的全局配置文件优先级是一个非常重要的概念,它决定了在不同位置的同名配置属性以哪个为准。
文件格式优先级: 在同一目录下,如果同时存在 application.properties
和 application.yml
文件,.properties
文件的优先级高于 .yml
文件。这意味着,如果两个文件中定义了相同的属性,将以 .properties
文件中的值为准。
文件位置加载顺序 (由高到低): Spring Boot会从多个位置加载 application.properties
或 application.yml
文件,优先级顺序如下(列表顶部的优先级最高):
spring.config.location
: 可以在启动应用时通过命令行参数直接指定配置文件的位置,这个位置的优先级最高。/config
子目录: 例如,如果你的 JAR 包在 /app/my-app.jar
,那么 /app/config/application.properties
的优先级很高。/app/application.properties
。/config
包: 项目 src/main/resources/config/
目录下的配置文件。src/main/resources/
目录下的配置文件。这是项目中最常用的位置。Profile特定配置文件的优先级:
application-{profile}.properties
) 的优先级总是高于不带profile的默认配置文件 (application.properties
)。dev
profile,并且在 src/main/resources/
目录下同时存在 application.properties
和 application-dev.properties
,那么 application-dev.properties
中的属性会覆盖 application.properties
中的同名属性。外部配置的整体优先级 (更广范围): 配置文件只是Spring Boot外部化配置优先级中的一部分。完整的优先级顺序(部分,从高到低)大致如下:
java -jar my-app.jar --server.port=9090
System.getProperties()
)application-{profile}.properties
)application.properties
)@PropertySource
注解指定的配置文件SpringApplication.setDefaultProperties
设置)核心要点总结:
.properties
优先于 .yml
(在同一级别)。