这是本人学习的总结,主要学习资料如下
- 马士兵教育
- 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: 3377
spring:
application:
name: nacos-config-client
cloud:
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
成功。