springboot 加载配置文件优先级
springboot 加载配置文件优先级
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
在 Spring Boot 应用中,配置文件的加载顺序和优先级决定了应用启动时如何解析和覆盖属性配置。Spring Boot 支持多种配置文件的加载,包括默认的 application.properties
或application.yml
,以及特定环境的配置文件等。以下是 Spring Boot 加载配置文件的优先级顺序,从高到低:
命令行参数
- 通过
--
前缀传递的参数,例如--server.port=8081
。这些参数的优先级最高,能够覆盖其他所有配置源。
- 通过
SPRING_APPLICATION_JSON
- 通过环境变量或系统属性传递的嵌套属性块,例如:
1
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
注解显式加载的属性文件。例如:1
2
3
4
public class AdditionalConfig {
}
- 默认属性
- 通过
SpringApplication.setDefaultProperties
指定的默认属性。例如:1
2
3
4
5SpringApplication app = new SpringApplication(MyApplication.class);
Map<String, Object> defaultProperties = new HashMap<>();
defaultProperties.put("server.port", 8081);
app.setDefaultProperties(defaultProperties);
app.run(args);
配置示例
假设我们有以下配置文件和内容:
application.properties
1
server.port=8080
application-dev.properties
1
server.port=8081
命令行参数
1
--server.port=8082
在应用启动时,Spring Boot 会按照上述优先级顺序解析配置。假设激活了 dev
配置文件(通过 spring.profiles.active=dev
),最终的server.port
值将被命令行参数覆盖为8082
。
激活配置文件
可以通过多种方式激活特定的配置文件:
命令行参数:
1
java -jar myapp.jar --spring.profiles.active=dev
环境变量:
1
export SPRING_PROFILES_ACTIVE=dev
配置文件中指定:
1
2# application.properties
spring.profiles.active=dev
通过理解和利用 Spring Boot 的配置文件加载顺序和优先级,可以更灵活地管理应用的配置,满足不同环境和场景下的需求。