前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。​​点击跳转到网站。​


文章目录


上篇介绍了

​nacos作为注册中心​​的使用,这篇来看看nacos作为配置中心将怎么使用?

nacos 配置中心 是什么

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

nacos config 和 springcloud config 对比

  • springcloud config大部分场景结合git 使用, 动态变更还需要依赖Spring Cloud Bus 消息总线来通过所有的客户端变化.
  • springcloud config不提供可视化界面
  • nacos config使用长轮询更新配置, 一旦配置有变动后,通知Provider的过程非常的迅速, 从速度上秒杀springcloud

常用配置中心对比

SpringCloud Alibaba 2021版 nacos 配置中心教程_spring

Spring Cloud Alibaba config 特性

支持配置的动态更新

spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,当配置修改时能获取到最新数据。

也可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

支持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} 这个配置项来配置。

spring.profiles.active=develop

profile 的配置文件 大于 默认配置的文件。 并且形成互补

支持自定义 namespace 的配置

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ​​${spring.cloud.nacos.config.namespace}​​ 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

支持自定义 Group 的配置

Group是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP 。

配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置。

在没有明确指定 ​​${spring.cloud.nacos.config.group}​​ 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

支持自定义扩展的 Data Id 配置

Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true

可以看到:

  • 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。
  • 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。


多个 Data Id 同时配置时,它的优先级关系是 ​​spring.cloud.nacos.config.extension-configs[n].data-id​​​ 其中 n 的值越大,优先级越高。
​​​spring.cloud.nacos.config.extension-configs[n].data-id​​​ 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。
此时 ​​​spring.cloud.nacos.config.file-extension​​ 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。


通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:

# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1

# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true

可以看到:

  • 通过​​spring.cloud.nacos.config.shared-configs[n].data-id​​ 来支持多个共享 Data Id 的配置。
  • 通过​​spring.cloud.nacos.config.shared-configs[n].group​​ 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过​​spring.cloud.nacos.config.shared-configs[n].refresh​​ 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。

配置的优先级

Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

  • A: 通过​​spring.cloud.nacos.config.shared-configs[n].data-id​​ 支持多个共享 Data Id 的配置
  • B: 通过​​spring.cloud.nacos.config.extension-configs[n].data-id​​ 的方式支持多个扩展 Data Id 的配置
  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是:A < B < C

完全关闭配置

通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config

Spring Cloud Alibaba config 2021.0.1.0 升级指南

  • 版本号
    从 2021.0.1.0 开始,SCA 版本将会对应 Spring Cloud 版本,
    前三位为 Spring Cloud 版本,最后一位为扩展版本

升级步骤

升级版本 (注意版本对应关系)

<dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>

注意事项:​spring-cloud-starter-alibaba-nacos-config​​​ 模块移除了 ​​spring-cloud-starter-bootstrap​​​ 依赖,如果你想以旧版的方式使用,你需要手动加上该依赖,现在推荐使用 ​​spring.config.import​​ 方式引入配置

完成以上步骤就能无缝切换到 ​​spring cloud alibaba 2021.0.1.0​​ 版本

新特性及其使用

  • 支持 spring.config.import
    这里假设有一个配置文件(​​​bootstrap.yml​​),升级到新版本应该怎么配置呢
# bootstrap.yml
spring:
cloud:
nacos:
config:
name: test.yml
group: DEFAULT_GROUP
server-addr: 127.0.0.1:8848
extension-configs:
- dataId: test01.yml
group: group_01
- dataId: test02.yml
group: group_02
refresh: false

这两个配置是等价的

# application.yml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: 127.0.0.1:8848
config:
import:
- optional:nacos:test.yml # 监听 DEFAULT_GROUP:test.yml
- optional:nacos:test01.yml?group=group_01 # 覆盖默认 group,监听 group_01:test01.yml
- optional:nacos:test02.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
- nacos:test03.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败

注意事项:

  • 如果使用 ​​spring.config.import​​ 就不能使用 bootstrap.yml/properties 引入配置的方式了 !!!
  • 如果引入了 ​​spring-cloud-starter-alibaba-nacos-config​​​,并且使用 import 方式导入配置,项目启动时会自动检测是否引入了 ​​nacos:​​ 条目,如果没有 import nacos 条目,会出现如下错误:
The spring.config.import property is missing a nacos: entry
Action:
Add a spring.config.import=nacos: property to your configuration.
If configuration is not required add spring.config.import=optional:nacos: instead.
To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.

你可以手动通设置 ​​spring.cloud.nacos.config.import-check.enabled=false​​ 关闭它,但是不建议这么做,这个功能可以帮助你检查是否引入多余依赖

  • 假如想保留以前的使用方式 (bootstrap引入配置),你只需要添加依赖​​spring-cloud-starter-bootstrap​​ 依赖,不需要修改一行代码

快速入门

本次使用版本:

Spring Cloud Alibaba 版本

Spring Cloud 版本

Spring Boot 版本

2021.1

2021.0.1

2.6.4

  1. 启动nacos server
    安装教程请移步到​​​windows系统 安装nacos服务注册与发现中心​
  2. 引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 修改配置文件
server:
port: 8090

spring:
cloud:
nacos:
discovery:
group: PROVIDER_GROUP
config:
group: PROVIDER_CONFIG_GROUP
server-addr: 127.0.0.1:8848
config:
import:
- optional:nacos:provider-config-dev.yml # 监听 PROVIDER_GROUP :provider-config-dev.yml
# - optional:nacos:provider-config-dev.yml?group=group_01 # 覆盖默认 group,监听 group_01:provider-config-dev.yml
# - optional:nacos:provider-config-dev.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
- nacos:provider-config-dev.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败
application:
name: nacos-provider
  1. 创建配置类 及 dataId配置文件
@Configuration
@ConfigurationProperties(prefix = "configdata")
public class UserConfig {

private String name;
private Integer age;
// 省略get/set方法
}

provider-config-dev.yml:

这个配置文件其实也可以不必在项目中配置,在nacos中配置即可,这里配置主要是做为一个记录而已

configdata:
age: 21
name: freeman
  1. 打开nacos管理后台,新建配置
  • 找到配置列表
    SpringCloud Alibaba 2021版 nacos 配置中心教程_nacos config_02
  • 点击+添加配置
    SpringCloud Alibaba 2021版 nacos 配置中心教程_nacos config_03
    Data ID: 对应着application.yml配置文件中spring.config.import属性中配置的文件名及其扩展名
    Group: spring.cloud.nacos.config.group属性对应的值
    格式:选择Data ID对应文件的扩展名
    配置内容: Data ID对应文件内容
    上述内容填写好之后,点击发布,在配置列表中就能看到刚刚填写的配置
    SpringCloud Alibaba 2021版 nacos 配置中心教程_spring_04
    打开nacos数据库,在config_info表中也能看到刚刚添加的数据
    SpringCloud Alibaba 2021版 nacos 配置中心教程_java_05
    接下来进入测试阶段,来验证上述配置是否可行
  1. 测试
    启动项目,在控制台可以看到配置的配置信息
    SpringCloud Alibaba 2021版 nacos 配置中心教程_nacos 配置中心_06
  • 首先在浏览器访问 http://localhost:8090/helloProvider/getConfig
    SpringCloud Alibaba 2021版 nacos 配置中心教程_spring_07
  • 然后修改在nacos管理后台 配置列表中找到provider-config-dev.yml配置,并编辑配置内容,将age从21修改为24,确认发布
    SpringCloud Alibaba 2021版 nacos 配置中心教程_nacos config_08
    再次访问 http://localhost:8090/helloProvider/getConfig
    SpringCloud Alibaba 2021版 nacos 配置中心教程_nacos config_09
    发现数据也变成最新的数据了。

至此,nacos做为配置中心的入门就完成了。

参考:


​https://nacos.io/zh-cn/docs/what-is-nacos.html​​ https://github.com/alibaba/spring-cloud-alibaba/wiki/


能力一般,水平有限,如有错误,请多指出。

如果对你有用点个关注给个赞呗