有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
在Spring Boot应用中,配置文件的加载顺序和优先级决定了应用启动时如何解析和覆盖属性配置。Spring Boot支持多种配置文件的加载,包括默认的application.properties或application.yml,以及特定环境的配置文件等。以下是Spring Boot加载配置文件的优先级顺序,从高到低:
命令行参数
- 通过
--前缀传递的参数,例如--server.port=8081。这些参数的优先级最高,能够覆盖其他所有配置源。
- 通过
SPRING_APPLICATION_JSON通过环境变量或系统属性传递的嵌套属性块,例如:
export SPRING_APPLICATION_JSON='{"server":{"port":8081}}'这种方式通常用于复杂的嵌套配置。
Java系统属性
- 使用
-D参数传递的属性,例如-Dserver.port=8081。
- 使用
操作系统环境变量
- 例如
SERVER_PORT=8081。
- 例如
RandomValuePropertySource- 用于在配置文件中生成随机数,使用占位符
#{random.int}、#{random.long}等。
- 用于在配置文件中生成随机数,使用占位符
JAR外部的
application-{profile}.properties或application-{profile}.yml- 位于应用程序目录外部的配置文件,通常位于
config子目录中,例如:file:./config/application-{profile}.properties或file:./config/application-{profile}.yml。
- 位于应用程序目录外部的配置文件,通常位于
JAR外部的
application.properties或application.yml- 位于应用程序目录外部的配置文件,例如:
file:./config/application.properties或file:./config/application.yml。
- 位于应用程序目录外部的配置文件,例如:
JAR内部的
application-{profile}.properties或application-{profile}.yml- 位于类路径(
classpath)中的配置文件,例如:classpath:/application-{profile}.properties或classpath:/application-{profile}.yml。
- 位于类路径(
JAR内部的
application.properties或application.yml- 位于类路径中的默认配置文件,例如:
classpath:/application.properties或classpath:/application.yml。
- 位于类路径中的默认配置文件,例如:
@PropertySource注解中的属性- 通过
@PropertySource注解显式加载的属性文件。例如:@Configuration @PropertySource("classpath:additional.properties") public class AdditionalConfig { }
- 通过
默认属性
- 通过
SpringApplication.setDefaultProperties指定的默认属性。例如:SpringApplication app = new SpringApplication(MyApplication.class); Map<String, Object> defaultProperties = new HashMap<>(); defaultProperties.put("server.port", 8081); app.setDefaultProperties(defaultProperties); app.run(args);
- 通过
配置示例
假设我们有以下配置文件和内容:
application.propertiesserver.port=8080application-dev.propertiesserver.port=8081命令行参数
--server.port=8082
在应用启动时,Spring Boot会按照上述优先级顺序解析配置。假设激活了dev配置文件(通过spring.profiles.active=dev),最终的server.port值将被命令行参数覆盖为8082。
激活配置文件
可以通过多种方式激活特定的配置文件:
命令行参数:
java -jar myapp.jar --spring.profiles.active=dev环境变量:
export SPRING_PROFILES_ACTIVE=dev配置文件中指定:
# application.properties spring.profiles.active=dev
通过理解和利用Spring Boot的配置文件加载顺序和优先级,可以更灵活地管理应用的配置,满足不同环境和场景下的需求。


