//
IT课程问答
JAVA-Nacos多环境配置 来源 : 华清远见     2023-04-23

Nacos多环境配置

 在开发过程中,我们的项目会存在不同的运行环境,比如开发环境、测试环境、生产环境,而我们的项目在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。

 Nacos除了可以做注册中心,也可以做统一配置管理(配置中心),Nacos提供了一种统一配置管理方案,可以集中管理所有实例的配置。

 Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

 

微服务要拉取Nacos中管理的配置,并且与本地的application.properties配置合并,才能完成项目启动,否则项目启动时就会报错。

但是现在有个问题:未读取application.properties,又如何得知nacos地址呢?

Spring引入了一种新的配置文件:bootstrap.properties文件,会在application.properties之前被读取。

1.DataID方案

在springboot配置文件中指定spring.profile.active和Nacos配置中心的DataID来使不同环境下读取不同的配置。

1.1 Nacos配置中心

在Nacos页面中配置管理的配置列表创建配置:


 

 

DataID完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。因此prefix的名字需要与项目配置文件中spring.application.name 的值保持一致。

spring.profiles.active 即为当前环境对应的 profile,例如开发环境为dev,测试环境为test,生产环境为prod等。 因此这里的值需要与项目配置文件中的spring.profiles.active的值保持一致。注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 𝑝𝑟𝑒𝑓𝑖𝑥.{file-extension}。

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。支持 properties 、 yaml 和 yml 类型。

Group:分组,默认为DEFAULT_GROUP。

配置格式:目前,Springboot中能识别的配置格式只支持YAML和Properties两个格式。

配置内容:根据自己需要配置的内容进行配置。

1.2 springboot配置

引入nacos-config依赖

<!-- 配置中心 --> <dependency>     <groupId>com.alibaba.cloud</groupId>     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

创建bootstrap.properties

#注册中心地址 spring.cloud.nacos.config.server-addr=localhost:8848 #与配置中心DataID的prefix一致 spring.cloud.nacos.config.prefix=productor ##与配置中心DataID的file-exetension一致 spring.cloud.nacos.config.file-extension=properties #与配置中心DataID的spring.profiles.active一致 spring.profiles.active=dev

启动springboot项目,使用postman通过消费者远程访问接口,可以成功返回结果:

 

2.GROUP方案

我们知道Group为分组,默认为:DEFAULT_GROUP,现在我们在Nacos分出两组,一组是“Dev开发组”,一组是“test测试组”

2.1 Nacos配置中心


2.2 springboot配置

微服务根据指定分组为dev或test进行切换。

 

启动springboot项目,使用postman通过消费者远程访问接口,可以成功返回结果:

 

 

3.命名空间方案

我们创建命名空间, 通过切换对应的命名空间,然后再通过Group和DataID来进行切换,即可以按照Namespace+Group+DataId来切换使用不同的配置文件。

3.1 Nacos配置中心

3.1.1 创建命名空间

在Nacos页面点击命名空间,点击创建命名空间

 

输入要新建的空间名,点击确定

点击服务列表和配置列表,查看多出一个命名空间

3.1.2 配置中心新增配置文件

在test命名空间下新建配置

添加配置项:

在此,我们可以定义不同的GROUP及DataID,实现Namespace+Group+DataId来切换不同的配置文件。

3.2 springboot配置

在bootstrap.properties文件中配置namespace、group及DataID

#注册中心地址 spring.cloud.nacos.config.server-addr=localhost:8848
#与配置中心DataID的prefix一致 spring.cloud.nacos.config.prefix=productor ##与配置中心DataID的file-exetension一致
spring.cloud.nacos.config.file-extension=properties spring.cloud.nacos.config.group=TEST_GROUP
#与配置中心DataID的spring.profiles.active一致
spring.profiles.active=test spring.cloud.nacos.config.namespace=5f8d56ea-111b-46e6-9edb-68bf92b9706b

启动springboot项目,使用postman通过消费者远程访问接口,可以成功返回结果:

4.权限控制+命名空间方案

在命名空间基础上,添加用户权限控制,可根据不同用户拉取该用户所拥有的不同命名空间的配置。

4.1 权限控制

4.1.1 开启权限控制

在nacos目录的conf文件夹下编辑application.properties,设置:

nacos.core.auth.enabled=true

4.1.2 创建自定义用户

在Nacos页面上点击用户列表,在列表页面点击创建用户

 

输入用户名和密码,点击确定完成用户创建。

4.1.3 创建角色

在Nacos页面上点击角色管理,在管理页面点击绑定角色
 

角色名可以自定义输入任意的名称,用户名输入已经创建的用户,点击确定完成。

4.1.4 创建权限

在Nacos页面上点击权限管理,在管理页面点击添加权限

 

角色名:已经创建的角色

资源:已经创建的命名空间

动作:只读(r)、只写(w)、读写(rw)

点击确定按钮,完成权限添加。

在nacos页面上退出账号,以新创建的账号登录:

 

当访问配置列表和服务列表的public时,提示权限认证失败,此时配置列表中public命名空间的配置文件不能进行读写。

4.1.5 创建命名空间的配置文件

根据命名空间方案(文中第3中方案)创建配置文件,以test命名空间为例,创建test命名空间,在test命名空间下创建配置文件。

 

4.2 springboot配置

在bootstrap.properties中添加test的用户名、密码、命名空间配置

#注册中心地址 spring.cloud.nacos.config.server-addr=localhost:8848
#与配置中心DataID的prefix一致 spring.cloud.nacos.config.prefix=productor #
#与配置中心DataID的file-exetension一致
spring.cloud.nacos.config.file-extension=properties spring.cloud.nacos.config.group=TEST_GROUP
#与配置中心DataID的spring.profiles.active一致
spring.profiles.active=test spring.cloud.nacos.config.namespace=5f8d56ea-111b-46e6-9edb-68bf92b9706b spring.cloud.nacos.username=test spring.cloud.nacos.password=123456

由于在Nacos中给test用户分配了test命名空间,所以需要在application.properties中添加test的命名空间配置,在bootstrap.properties中已经配置nacos的用户名和密码,在这里可不配置,用户名默认使用spring.cloud.nacos.username,密码默认使用spring.cloud.nacos.password。

spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.service=${spring.application.name} spring.cloud.nacos.discovery.namespace=${spring.cloud.nacos.config.namespace}

4.3 测试

启动springboot项目,使用postman通过消费者远程访问接口,可以成功返回结果:

 

将bootstrap.properties中的group、active修改为dev,启动springboot项目则报错:

 

该现象说明当group、active修改为dev后,test用户没有权限访问,不能拉取nacos中dev命名空间下的配置文件,导致springboot项目启动获取配置文件中的配置项时失败。

 

扫码申领本地嵌入式教学实录全套视频及配套源码
//

上一篇:程序员面试时,那些必须注意的事情

下一篇:H5教学-瀑布流

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号