在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。Nacos可以作为配置中心,存储和管理配置信息。
快速开始步骤:
(1)新建模块:cloudalibaba-config-nacos-client3377
(2)pom:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
2.2.2.RELEASE
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
(3)yml编写,这里需要两个yml
3.1 bootstrap.yml:
#nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client #微服务名称:nacos配置中心的客户端
cloud:
nacos:
discovery: #服务发现的配置
server-addr: localhost:8848 #nacos服务注册中心,即将此服务注册进nacos
config: #配置中心的配置
server-addr: localhost:8848 #nacos作为配置中心的地址
file-extension: yaml #官方指定以.yaml结尾的文件作为文件扩展名,file-extension:文件扩展名的意思
spring:
profiles: #特征文件/配置文件
active: dev #表示开发环境
(4)主启动类:com.fan.springcloud.NacosConfigClientMain3377
package com.fan.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication //SpringBoot应用
@EnableDiscoveryClient //开启服务发现客户端
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class,args);
}
}
(5)业务类controller: controller.ConfigClientController
package com.fan.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope //这个和config+bus总线那边的注解一样,支持nacos的动态刷新功能
public class ConfigClientController {
@Value("${config.info}")//注入配置文件中config.info的信息
private String configInfo;
@GetMapping(value = "/config/info")
public String getConfigInfo(){
return configInfo;
}
}
注意:这里通过spring cloud 原生注解@RefreshScope 实现配置的自动更新。
(6)测试:
(6.1)在nacos的网页控制台/仪表盘 创建在线配置文档:
设置data ID(数据id,这里注意命名格式要符合规定): nacos-config-client-dev.yaml :
config:
info: config信息用于dev环境,来自nacos配置中心,dataid:nacos-config-client-dev.yaml,版本=1
然后发布即可:
(6.2)启动微服务并测试:注意,在线配置文件这的后缀拓展名必须是yaml,写成yml报错
测试结果:localhost:3377/config/info
1.配置管理
SpringCloud Alibaba Nacos Config配置中心有三种配置方法,分别为:
1.Data ID配置方案
2.Group配置方案
NameSpace —— Nacos默认的命名空间是public, Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group —— Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service/DataId —— Service就是微服务。一个Service可以包含多个Cluster (集群) ,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ) ,还可以尽量让同一个机房的微服务互相调用,以提升性能。
SpringCloud Alibaba Nacos Config配置中心有三种配置方法,分别为:
1.Data ID配置方案
2.Group配置方案
3.NameSpace配置方案
通过spring.profiles.active属性就能进行多环境下配置文件的读取
修改application.yml配置文件:
然后在nacos网页控制台新建三个不同的Data Id :
(注意,这里为了演示Data Id ,所以我们会在相同的public下的同一个默认组下使用不同的Data Id名字):
类似的,我们用以上方式创建nacos-config-client-pro.yaml,nacos-config-client-test.yaml
最终效果:
然后我们想使用哪个配置文件,直接在application,yml中激活它就可,如图使用test配置文件,则对应nacos-config-client-test.yaml
测试:localhost:3377/config/info
Data Id总结:
第一步:application.yml中修改并激活要使用的环境。
第二步:nacos网页控制台在配置列表新建同一个组下的不同data id ,data id的命名规则请遵循以下方式:三部分构成:
spring.application.name的值-spring.profile.active的值.配置文件的扩展名
通过Group实现环境区分:原理:相同的Data id名称,但是让他们位于不同的组,来实现隔离使用.
group: DEV_GROUP #指定所属分组,这里相当于切换配置文件的开关
bootstrp.yml:
#nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client #微服务名称:nacos配置中心的客户端
cloud:
nacos:
discovery: #服务发现的配置
server-addr: localhost:8848 #nacos服务注册中心,即将此服务注册进nacos
config: #配置中心的配置
server-addr: localhost:8848 #nacos作为配置中心的地址
file-extension: yaml #官方指定以.yaml结尾的文件作为文件扩展名,file-extension:文件扩展名的意思
group: DEV_GROUP #指定所属分组,指定所属分组,这里相当于切换配置文件的开关
这里新建三个不同的组:DEV_GRUOP,TEST_GRUOP,PRO_GRUOP
启动微服务并测试:profile环境不变,group更换:
group: DEV_GROUP #指定所属分组,这里相当于切换配置文件的开关,TEST_GROUP,PRO_GROUP两个值可选
切换到测试组:
然后测试:成功读取:
Group配置方案总结:
第一步:application.yml中active激活的环境不用再来回切换变动了。用一个固定的。
第二步:修改bootstrap.yml中config.group,设置几个不同的备用组,和nacos网页控制台的配置列表中的组对应。
第三步:通过手动改变组名来实现切换不同的配置文件内容。(同一个配置文件的唯一data id ,但是内容不同)
通过指定namespace进行区别
第一步:新建命名空间:
这里的命名空间类似于一个公司,然后公司里面又分好几个项目组,组内有好多配置(如组内开发的,测试的,运维的)
新建命名空间:这里我们创建了两个,dev和test,命名空间的id我们不填,让其自动生成。
第二步:按照域名配置填写:
2.2 创建配置文件:
(1)进入test命名空间内(类似进入一个公司),创建一个配置文件:nacos-config-client-properties.yaml,组名TEST_GROUP
nacos-config-client-properties.yaml配置文件内容:
config:
info: 我是命名空间test的配置文件,属于TEST_GROUP组,版本1
(2)进入dev命名空间内(类似进入一个公司),创建一个相同的配置文件:nacos-config-client-properties.yaml,组名也相同,组名TEST_GROUP
nacos-config-client-properties.yaml
config:
info: 我是dev公司/命名空间的配置文件,我属于TEST_GROUP组,版本1
解释:相当于两家公司,一个是test公司,一个是dev公司,两家公司都有一个组叫TEST_GROUP组,并且该组内有相同的配置文件的名字nacos-config-client-properties.yaml,那只能通过公司名,(即命名空间)来区分了这个文件。
2.3 修改bootstrap.yml配置文件:
切换命名空间的流水号后测试:发现成功读取到不同命名空间下的文件:
vip:虚拟映射ip