Nacos Config的多环境(Profile)配置信息读取
本章目标
读取Profile多环境下Nacos Config的配置信息,了解多环境下相同的配置优先级加载问题。
在之前文章中我们学习到了SpringCloud Alibaba读取Nacos Config内定义的properties、Yaml类型的配置文件信息,并且使用Nacos Console进行修改配置信息后可以在应用程序内实时更新。
在我之前的SpringBoot系列教程中有提到Profile(多环境)相关的概念,有兴趣的同学可以去查看/springboot-active-profiles.html文章,既然应用程序存在Profile分离的概念, Nacos Config同样为我们提供了这一概念,接下来我们来看看是如何进行Profile的配置信息切换使用、优先级替换。
快速入门
我们还是先来通过Nacos Console来添加本章所使用的配置信息,要注意配置的后缀名改为yaml。
Nacos Server
需要在本地安装Nacos Server才能完成本章的内容讲解,具体的安装步骤访问Nacos 官方文档
添加配置
通过Nacos控制台添加本项目所使用的配置信息,之前又讲到过SpringCloud Alibaba默认使用spring.application.name作为DATA-ID,本章的spring.application.name = hengboy-spring-cloud-config-profile,所以我们添加如下两个配置信息:
- hengboy-spring-cloud-config-profile.yaml

这个配置是不参与任何profile环境的基础配置,其定位其实跟application.yml差不多。 - hengboy-spring-cloud-config-profile-dev.yaml

这个配置则是profile=dev环境的配置信息,其定位跟application-dev.yml差不多。
创建应用
通过idea开发工具来创建一个SpringCloud项目,并添加SpringCloud 版本依赖、SpringCloud Alibaba 版本依赖,pom.xml配置内容如下所示:
1 | //... |
配置bootstrap.yml
之前有说过,SpringCloud Alibaba所需要的配置信息,需要在引导配置bootstrap.yml文件内添加,如下所示:
1 | # application name |
我们本章用到的配置文件的格式为yaml所以需要通过spring.cloud.nacos.config.file-extension进行配置,该参数默认为properties。
读取配置
我们创建一个SpringMvc Controller来读取配置信息,ConfigController如下所示:
1 | //... |
运行测试
通过Application方式启动应用程序后,打开终端访问通过如下命令行:
1 | curl -X GET http://localhost:8080/config/get |
看到输出内容你应该会感觉到不可思议,按照我们之前说的这里应该去找spring.application.name所对应的配置信息,也就是hengboy-spring-cloud-config-profile.yaml的配置信息,在上面步骤中我们在hengboy-spring-cloud-config-profile.yaml内添加的配置信息不是xxx-xxx-dev而是xxx-xxx-xx。
多环境配置的优先级
上面出现的情况,其实一点也不奇怪,Nacos Config所被应用到SpringBoot、SpringCloud项目时,如果项目内存在Profile多环境的配置,就会自动去找spring.profile.actives所激活的profile配置文件,如下所示:
1 | # 激活dev profile时 |
我们激活spring.profile.actives=dev时,Nacos Config会自动去找两个配置文件,分别是:hengboy-spring-cloud-config-profile.yaml、hengboy-spring-cloud-config-profile-dev.yaml。
这也就对应上面说的application配置文件与Nacos Config配置文件的对应关系:
1 | # 默认的配置 |
我们之前在学习SpringBoot时讲到过,profile多环境下的配置如果与默认配置(application.yml)相同时会自动被覆盖掉,如下所示:
1 | # application.yml |
根据上面的额配置的项目,在启动时会使用
9000作为启动端口。
Nacos Config也是同样的概念设计,这一点可能是不想改变太多相关SpringBoot、SpringCloud的习惯,让开发者更方面的集成使用。
结论
根据上面的解释,我们在访问/config/get时你就明白为什么返回的是xxx-xxx-dev了。
Nacos Config的多环境(Profile)配置信息读取
https://blog.minbox.org/springcloud-nacos-config-profile.html

OAuth vs SAML vs OpenID
