继续我们nacos的学习记录,本篇记录一下Nacos作为配置中心,之前我们会使用Spring Cloud Config进行各服务的配置管理,配合Spring Cloud Bus来完成配置文件的实时刷新更改,使用Nacos可以代替Spring Cloud Config和Spring Cloud Bus完成配置的动态管理,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
目录
动态刷新
配置管理
环境搭建
新建alibaba-config-server模块
pom文件
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
bootstrap.yml文件
# nacos配置
server:
port: 3377
spring:
application:
name: alibaba-nacos-config-server
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
application.yml文件
spring:
profiles:
active: dev # 表示开发环境
#active: test # 表示测试环境
#active: info
启动类
加@EnableDiscoveryClient注解
动态刷新
在测试类上添加@RefreshScope
测试类
@RestController
@RefreshScope //使当前类下的配置支持Nacos的动态刷新功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
在Nacos中添加配置信息
进入Nacos的配置列表进行配置信息的管理:
Data ID的配置:
完整格式:${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
为了更直观,借用网上的一张图:
根据上面bootstrap.yml和application.yml文件的配置我们的dataid为 :
alibaba-nacos-config-server-dev.yaml
我们在nacos中添加配置:
测试
启动服务,访问 http://localhost:3377/config/info ,结果如下:
修改配置文件version=2,再次访问 http://localhost:3377/config/info发现结果已经改变,如下:
多环境配置管理
实际开发中,通常一个系统会准备有多种环境,如dev开发环境、test测试环境、prod正式环境,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
Nacos支持基于Namespace和Group的配置分组管理,以便用户更灵活的根据自己的需要按照环境或者应用、模块等分组管理微服务以及Spring的大量配置。
Namespace、Group与Data Id
Namespace
Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值,默认的命名空间是public。
Group
每个微服务项目又都会有相应的开发环境、测试环境、正式环境等,那怎么对同一个服务不同的环境配置进行管理呢?这时就可以使用Group来进行区分,Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。
大体意思就是说:namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
通过Data Id加载配置
我们使用默认空间+默认分组+dev/test两个DataID进行测试,先说下结论,在application.yml文件配置是哪个DataID就加载哪个的内容。
环境准备
新增alibaba-nacos-config-server-test.yaml配置,如下:
修改application.yml文件,修改active为test
spring:
profiles:
#active: dev # 表示开发环境
active: test # 表示测试环境
测试
启动服务访问 http://localhost:3377/config/info ,此时会返回alibaba-nacos-config-server-test.yaml配置的内容:
通过Group加载配置
环境准备
我们新建两个DataID为alibaba-nacos-config-server-info.yaml的配置,分别分到DEV_GROUP和TEST_GROUP分组中,如下:
修改application.yml文件,修改active为info
spring:
profiles:
#active: dev # 表示开发环境
#active: test # 表示测试环境
active: info
修改bootstrip.yml文件,在config下增加一条group的配置即可,可配置为DEV_GROUP或TEST_GROUP,如下:
# nacos配置
server:
port: 3377
spring:
application:
name: alibaba-nacos-config-server
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEV_GROUP
测试
启动服务访问 http://localhost:3377/config/info ,此时会根据group配置的分组返回alibaba-nacos-config-server-info.yaml配置的内容,如上配置的group为 DEV_GROUP,返回如下:
通过Namespace加载配置
环境准备
新建dev和test命名空间,如下:
在配置列表中找到dev命名空间并添加如下三个配置:
默认分组、test、dev分组的内容分别为
config:
info: username zhangsan password 123
config:
info: username lisi password 123
config:
info: username wangwu password 123
修改application.yml文件,将active修改为dev:
spring:
profiles:
active: dev # 表示开发环境
#active: test # 表示测试环境
#active: info
修改bootstrip.yml文件,添加 namespace: d9a7456c-369e-4d50-80a9-565decc08478,其中d9a7456c-369e-4d50-80a9-565decc08478为nacos命名空间列表中的命名空间ID,完整如下:
# nacos配置
server:
port: 3377
spring:
application:
name: alibaba-nacos-config-server
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEV_GROUP
namespace: d9a7456c-369e-4d50-80a9-565decc08478
测试
启动服务访问 http://localhost:3377/config/info ,此时会根据namespace和group以及active的配置返回d9a7456c-369e-4d50-80a9-565decc08478命名空间下DEV_GROUP分组的alibaba-nacos-config-server-dev.yaml配置的内容,返回如下: