1、优先级排序
- 开发者通过编程方式提供的配置:使用
SpringApplicationBuilder
或者SpringApplication
直接设置的属性。 - 命令行参数:运行时传递给应用程序的命令行参数,如
java -jar app.jar --server.port=8081
。 - Java系统属性(System properties):通过 JVM 参数传递给应用程序,如
-Dserver.port=8081
。 - 操作系统环境变量:在操作系统级别设置的环境变量。
- RandomValuePropertySource:在配置文件中可以使用
${random}
来生成随机数作为属性值。 - JAR 包外部的 application-{profile}.properties 或 application-{profile}.yml:位于外部配置文件中的 profile-specific 配置。
- JAR 包内部的 application-{profile}.properties 或 application-{profile}.yml:位于 JAR 包内部的 profile-specific 配置。
- JAR 包外部的 application.properties 或 application.yml:在 JAR 的同级目录下的配置文件。
- 在配置服务器中的属性:使用 Spring Cloud Config Server 时,配置服务器中的属性具有较高优先级。
- JAR 包内部的 application.properties 或 application.yml:在 JAR 包的类路径根目录下的配置文件。
- @Configuration 注解类上的 @PropertySource:在代码中使用
@PropertySource
注解加载的配置。 - 通过 SpringApplication.setDefaultProperties 指定的默认属性:在应用程序启动时设置的默认属性。
Spring Boot 允许你通过设置 spring.profiles.active
和 spring.config.location
属性来激活特定的配置文件和指定配置文件的位置,进一步提供灵活的配置管理。
以上列表是按照配置源的优先级排序的。如果你在多个位置定义了相同的属性,那么按照这个列表顺序,优先级越高的配置源将覆盖优先级较低的同名属性。
Apollo(阿波罗)是一个由携程框架部门开源的配置中心服务,旨在为分布式系统提供集中式的配置管理服务。在Spring Boot应用中集成Apollo后,Apollo中的配置属性将会和Spring Boot的本地配置文件(比如application.properties
或application.yml
)等共同作用于应用配置。