这是本人学习的总结,主要学习资料如下
- 马士兵教育
- 1、Overview
- 2、样例
- 2.1、Dependency
- 2.2、配置文件的定位
- 2.3、bootstrap.yml
- 2.4、配置中心新增配置
- 2.5、验证
1、Overview
配置中心用于管理配置项和配置文件,比如平时写的application.yml就是配置文件。
我们可以把配置文件存在配置中心中,然后动态获取配置文件。更方便的是,我们可以动态修改配置文件,在不重启系统的情况下更新配置。
2、样例
我会建立一个Spring项目,将其注册到Nacos中,然后从Nacos动态获取配置。
2.1、Dependency
首先是作为一个普通的Client需要注册到Nacos中,另外想要从Nacos中获取配置则需要加上spring-cloud-starter-alibaba-nacos-config这个依赖。
<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
2.2、配置文件的定位
配置中心有多个配置文件,我们需要一些主键来定位确定我们的项目使用哪个配置文件。
配置文件的主键由namespace,group,spring.profiles.active,spring.application.name,spring.cloud.nacos.config.file-extension组成,其中spring.profiles.active,spring.application.name,spring.cloud.nacos.config.file-extension这三个组成一个叫dataId的东西。
namespace和注册中心的意义相同。它通常代表着一个环境,所有的东西都要装进一个namespace里面。默认使用叫public的命名空间,可以用spring.cloud.nacos.config.namespace指定。group也是和注册中心的意义相同,它通常代表一个业务,比如order-group。默认是DEFAULT_GROUP,可以用spring.cloud.nacos.config.group指定,要注意的是指定的是命名空间的id而不是name。spring.profiles.active和spring.application.name,Spring项目的配置。spring.cloud.nacos.config.file-extension,表示配置文件的后缀名。dataId,由spring.profiles.active和spring.application.name和spring.cloud.nacos.config.file-extension三者组成,需要在配置中心填写。组成规则是${spring.application.name}-${spring.profiles.active}.${file-extension}。比如说applicationName是nacos-config-client,profile是dev,file-extension是yaml,那么dataId就是nacos-config-client-dev.yaml。
2.3、bootstrap.yml
我们需要配置关于配置中心的内容,比如配置中心的地址,配置中心的配置文件的后缀名等等。
所以关于配置中心的配置需要在项目启动前加载。而bootstrap.yml在application.ylm之前加载,所以关于配置中心的配置我们都会选择放在bootstrap.yml中。
前面的配置是项目作为Nacos的Client需要配置的。只有在spring.cloud.nacos.config才是关于配置中心的。该例子中设置了配置中心的地址是localhost:8848,拉取后缀名是yaml的文件。
# nacos配置
server:port: 3377spring:application:name: nacos-config-clientcloud:nacos:discovery:server-addr: localhost:8848 #Nacos服务注册中心地址config:server-addr: localhost:8848 #Nacos作为配置中心地址file-extension: yaml #指定yaml格式的配置# group: DEFAULT_GROUP 默认值,不写默认是DEFAULT_GROUP
这里或许会有些奇怪,配置中心那么多配置文件,不需要指定配置文件名可以获取到我们想要的那个文件吗?这里是涉及到dataId的命名规则,在后续会讲到。
application.yml的内容比较简单,只是设置了当前的profile
spring:profiles:active: dev
2.4、配置中心新增配置
点击Nacos管理页面右上角的加号就可以新增配置。

配置时有两个值必填,一个是dataId,另一个是group。这两个值相当于是该配置文件的主键。
dataId,它的值必须遵循一定的规则。
dataId必须是这样的格式${spring.application.name}-${spring.profiles.active}.${file-extension}。
在这里例子当中,spring.application.name=nacos-config-client,springprofiles.active=dev,file-extension=yaml。
所以dataId必须是nacos-config-client-dev.yaml。只有这样Nacos才知道当前新增的配置文件是属于哪个Client的。
我们新增一个配置config.info=hello。具体截图如下,必须注意,每个冒号后面都要接一个空格。

而group的默认值是DEFAULT_GROUP,我们在bootstrap.yml中不明确写spring.cloud.nacos.config.group的值的话,那Spring项目默认是拉取group=DEFAULT_GROUP的配置文件。
2.5、验证
用下面的代码验证系统是否读取到了配置中心的配置。
注意@RefreshScope这个注解,这个注解能让我们一直获取到最新的配置,并且不用重启项目。
@RestController
@RefreshScope
public class ConfigController {@Value("${config.info}")private String configInfo;@GetMapping("/config/info")public String getConfigInfo(){return configInfo;}
}
获取config.info成功。