Springboot配置文件加载顺序(含Nacos配置)

498 阅读1分钟
## 内部配置

在标准的 SpringBoot 应用中,系统配置文件加载顺序如下:

1.  bootstrap.yaml
2.  bootstrap.yml
3.  bootstrap.properties
4.  bootstrap-{profile}.yaml
5.  bootstrap-{profile}.yml
6.  bootstrap-{profile}.properties
7.  application.yaml
8.  application.yml
9.  application.properties
10. application-{profile}.yaml
11. application-{profile}.yml
12. application-{profile}.properties
13. nacos 配置中心共享配置(通过 spring.cloud.nacos.config.shared-configs 指定)
    如:project-common.yaml
14. nacos 配置中心该服务配置(通过 spring.cloud.nacos.config.prefix 和 spring.cloud.nacos.config.file-extension 指定)
    如:project-service-ext.yaml
15. nacos 配置中心该服务-{profile} 配置(通过 spring.cloud.nacos.config.prefix 和spring.cloud.nacos.config.file-extension、以及 spring.profiles.active 指定)
    如:project-auth-dev.yaml

优先级低的配置会被先加载,从上往下优先级逐渐增高,
后加载的配置会覆盖掉已存在的相同配置。

同时,相同类型配置下的配置优先级如下:
properties(最高)> yml > yaml(最低)

## 外部配置

基于外部配置命令或外部配置文件启动项目时,配置的优先级如下:

1. 命令行参数
2. 来自Java系统属性(System.getProperties())的属性
3. 操作系统环境变量
4. jar 同级目录的 config 目录的子文件夹
5. jar 同级目录的 config 目录的子文件
6. jar 同级目录的配置文件
7. 项目内配置文件:参考“内部配置”
8. 在 @Configuration 类上通过 @PropertySource 注解指定的属性文件
9. 在代码中通过 @Value 或 @ConfigurationProperties 等注解设置的默认值
10. 默认属性

## 命令行配置

springboot 启动命令行参数可由 `-D``--` 指定,这两种配置的区别如下:

1. `-D` 为虚拟机参数,放在 `-jar` 之前,可以使用 `properties` 方法获取
2. `--` 为运行参数,放在 `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
```