Springboot配置文件加载顺序(含Nacos配置)
内部配置
在标准的 SpringBoot 应用中,系统配置文件加载顺序如下:
- bootstrap.yaml
- bootstrap.yml
- bootstrap.properties
- bootstrap-{profile}.yaml
- bootstrap-{profile}.yml
- bootstrap-{profile}.properties
- application.yaml
- application.yml
- application.properties
- application-{profile}.yaml
- application-{profile}.yml
- application-{profile}.properties
- nacos 配置中心共享配置(通过 spring.cloud.nacos.config.shared-configs 指定)
如:project-common.yaml - nacos 配置中心该服务配置(通过 spring.cloud.nacos.config.prefix 和 spring.cloud.nacos.config.file-extension 指定)
如:project-service-ext.yaml - nacos 配置中心该服务-{profile} 配置(通过 spring.cloud.nacos.config.prefix 和spring.cloud.nacos.config.file-extension、以及 spring.profiles.active 指定)
如:project-auth-dev.yaml
优先级低的配置会被先加载,从上往下优先级逐渐增高,
后加载的配置会覆盖掉已存在的相同配置。
同时,相同类型配置下的配置优先级如下:
properties(最高)> yml > yaml(最低)
外部配置
基于外部配置命令或外部配置文件启动项目时,配置的优先级如下:
- 命令行参数
- 来自Java系统属性(System.getProperties())的属性
- 操作系统环境变量
- jar 同级目录的 config 目录的子文件夹
- jar 同级目录的 config 目录的子文件
- jar 同级目录的配置文件
- 项目内配置文件:参考“内部配置”
- 在 @Configuration 类上通过 @PropertySource 注解指定的属性文件
- 在代码中通过 @Value 或 @ConfigurationProperties 等注解设置的默认值
- 默认属性
命令行配置
springboot 启动命令行参数可由 -D
和 --
指定,这两种配置的区别如下:
-D
为虚拟机参数,放在-jar
之前,可以使用properties
方法获取--
为运行参数,放在xx.jar
之后,springboot 将自动解析为对应配置
示例:
java -Dserver.port=8888 -jar app.jar --spring.config.location=/app/application.yml
java -jar app.jar --server.port=8888 --spring.config.location=/app/application.yml