Spring Cloud Alibaba 学习笔记(十一):服务配置(Nacos Config)
目录:Spring Cloud Alibaba学习笔记(总) - 今日说码 (96xl.top)
上一篇:Spring Cloud Alibaba学习笔记(十):网关全局过滤 - 今日说码 (96xl.top)
概述
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
创建配置文件
在Nacos Server中创建配置文件,访问http://localhost:8848/nacos,在配置列表中,点击右上角的加号。
以服务提供者项目为例,新建以下配置:
- Data ID可随意指定,但是默认扩展名为
.properties
,希望使用 YAML 配置,此处必须指明是.yaml
。 - 配置格式指定为YAML。
- 配置内容中将
spring-cloud-alibaba-nacos-provider
子模块的application.yml
配置文件中的所有配置复制过来。
点击发布,发布成功后在列表上就可以看到刚才添加的配置了。
Nacos Config客户端的使用
以服务提供者项目为例。
修改pom
使用Nacos Config客户端需要添加 org.springframework.cloud:spring-cloud-starter-alibaba-nacos-config
依赖,之前创建项目时已经添加过了,就不再重复添加了。
添加bootstrap.yml
删除之前创建的 application.yml
配置文件,同时在 resources
目录下添加 bootstrap.yml
配置文件,内容如下:
spring:
application:
# 这里的应用名对应Nacos Config中的Data ID,实际应用名称以配置中心的配置为准
name: nacos-provider-config
cloud:
nacos:
config:
# Nacos Server的地址
server-addr: 127.0.0.1:8848
# 文件扩展名
file-extension: yaml
Spring Boot 配置文件的加载顺序,依次为 bootstrap.properties
-> bootstrap.yml
-> application.properties
-> application.yml
。
项目结构
项目最终目录结构如下:
启动项目
重新启动 ProviderApplication
实例,等待出现 Started ProviderApplication in 7.105 seconds (JVM running for 8.228)
启动成功的提示后,可以在控制台日志中看到成功加载配置文件的提示。
上面这行日志虽然是WARN级别,但是并不影响正常启动。大致意思就是忽略空的nacos配置,并根据dataId[nacos-provider-config]和group[DEFAULT_group]获取它,其实还是正常获取到了。
配置动态更新
Nacos Config也支持配置的动态更新,以上面的 nacos-provider-config.yaml
为例。
修改配置
在Nacos Server配置内容中增加一个 user.name
的属性,修改后重新发布。
修改Controller
在 NacosProviderController
类中添加一个新接口用来测试,代码如下:
@Autowired
private ConfigurableApplicationContext applicationContext;
@GetMapping("/hi")
public String sayHi() {
return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
}
测试
重启 ProviderApplication
实例,等待出现 Started ProviderApplication in 6.407 seconds (JVM running for 7.459)
启动成功的提示后,访问localhost:8081/hi,会出现以下响应:
这个 user.name
属性就是刚才新加的,将属性值进行修改后重新发布,再次访问localhost:8081/hi,会出现以下响应:
说明配置刷新成功,同时控制台日志可以查看到相应提示:
可以在 bootstrap.yml
中使用 spring.cloud.nacos.config.refresh.enabled=false
来关闭动态刷新,默认为true。
Nacos Config多环境的配置
Spring Boot Profile
我们在做项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以我们可能会在上线的时候手工修改这些配置信息。但是 Spring 中为我们提供了 Profile 这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的 Profile 就可以了。
操作起来很简单,只需要为不同的环境编写专门的配置文件,如:application-dev.yml
、application-prod.yml
, 启动项目时只需要增加一个命令参数 --spring.profiles.active=环境配置
即可,启动命令如下:
java -jar xxx.jar --spring.profiles.active=prod
Nacos Config Profile
spring-cloud-starter-alibaba-nacos-config在加载配置的时候,不仅仅加载了以dataId 为 ${spring.application.name}.${file-extension:properties}
为前缀的基础配置,还加载了 dataId为 ${spring.application.name}-${profile}.${file-extension:properties}
的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active}
这个配置项来配置。
创建配置文件
在Nacos Server中添加一个新的配置文件,内容如下:
这个配置文件仅仅是将端口号由 8081
改为了 8082
,点击发布。
添加bootstrap-prod.yml
在 bootstrap.yml
配置文件同级目录下添加 bootstrap-prod.yml
配置文件,内容如下:
主要区别就是添加了 spring.profiles.active=prod
配置,用于指定访问Nacos Server中的 nacos-provider-config-prod.yaml
配置文件。
启动项目
此时我们有两个配置文件,分别为 bootstrap.yml
和 bootstrap-prod.yml
,我们需要指定启动时加载哪一个配置文件。
点击编辑 ProviderApplication
启动类配置(上次我们测试服务消费者(Feign)负载均衡时,修改过一次)。
在Active profiles配置后面添加 prod
,即可指定启动时加载 bootstrap-prod.yml
配置文件。
点击保存后,再次右键 ProviderApplication
选择Debug启动(上次我们测试服务消费者(Feign)负载均衡时,已经设置过允许并行运行),等待出现 Started ProviderApplication in 6.605 seconds (JVM running for 7.666)
启动成功的提示后,观察控制台日志,可以看到加载的是 nacos-provider-config-prod.yaml
配置文件,并且项目启动使用的端口号是我们在 nacos-provider-config-prod.yaml
配置文件中指定的 8082
,说明配置生效。
Group
上面我们在Nacos Server添加配置时,Group使用的是默认的 DEFAULT_GROUP
,这里是可以修改为其他的Group。
在列表上可以看到刚才新加的配置。
这时候 application.yml
配置文件中就需要添加 spring.cloud.nacos.config.group=TEST
配置了,指定一下group名称,不指定的话使用的是默认的 DEFAULT_GROUP
。
命名空间
在命名空间列表中,可以看到有一个保留的命名空间 public
,我们上面添加的所有配置都是在这个命名空间下。如果需要新增其他命名空间的话,点击右上角新建命名空间,输入名称和描述即可。如果不指定命名空间ID,则会自动生成一个。
想要在新建的命名空间下添加配置,在配置列表中点击左上方的命名空间名称进行切换即可。
这时候 application.yml
配置文件中就需要添加 spring.cloud.nacos.config.namespace=da24b330-3ef1-4697-b502-2ac2507a6458
配置了,指定一下命名空间ID,不指定的话使用的是默认的 public
。
bootstrap.yml文件内容
最后 bootstrap.yml
配置文件内容如下:
spring:
application:
# 这里的应用名对应Nacos Config中的Data ID,实际应用名称以配置中心的配置为准
name: nacos-provider-config
cloud:
nacos:
config:
# Nacos Server的地址
server-addr: 127.0.0.1:8848
# 文件扩展名
file-extension: yaml
# group名称
group: TEST
# 命名空间ID
namespace: da24b330-3ef1-4697-b502-2ac2507a6458
目录:Spring Cloud Alibaba 学习笔记(总) - 今日说码 (96xl.top)
上一篇:Spring Cloud Alibaba 学习笔记(十):网关全局过滤 - 今日说码 (96xl.top)
标题:Spring Cloud Alibaba 学习笔记(十一):服务配置(Nacos Config)
作者:96XL
地址:https://solo.96xl.top/articles/2022/02/11/1644578351540.html