CodeAshen's blog CodeAshen's blog
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)

CodeAshen

后端界的小学生
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)
  • 剖析Spring5核心原理

  • Spring源码轻松学

  • Spring Boot 2.0深度实践

  • Spring-Cloud

  • Spring-Cloud-Alibaba

    • 第01章-简介
    • 第02章-Nacos服务发现
    • 第03章-Ribbon负载均衡
    • 第04章-Feign声明式HTTP客户端
    • 第05章-Sentinel集群容错
    • 第06章-RocketMQ消息队列
    • 第07章-Spring Cloud Gateway网关
    • 第08章-认证授权
    • 第09章-Nacos配置管理
      • 9.1 配置管理介绍
      • 9.2 配置示例
      • 9.3 应用配置共享
        • 9.3.1 同一服务不同环境共享:
        • 9.3.2 不同服务共享
        • 9.3.3 配置方式优先级
      • 9.4 引导上下文
        • 9.4.1 引导上下文介绍
        • 9.4.2 配置项优先级
      • 9.5 Nacos数据持久化
        • 9.5.1 Nacos的各种数据
        • 9.5.2 搭建生产可用的Nacos集群
    • 第10章-Sletuh调用链
  • Spring
  • Spring-Cloud-Alibaba
CodeAshen
2023-02-10
目录

第09章-Nacos配置管理

# 9.1 配置管理介绍

为什么要实现配置管理?

  • 不同环境,不同配置
  • 配置属性动态刷新

image-20210308103619781

# 9.2 配置示例

nacos配置管理的配置文件是bootstrap.yml,其中也有server-addr配置,这是因为Spring Cloud Alibaba将服务发现和配置管理区分开了,nacos服务发现的集群和nacos配置管理的集群可以分离,这样职责单一,性能也更好。

加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
1
2
3
4

写配置,resource目录下新建bootstrap.yml文件

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

  application:
    name: content-center
  profiles:
    active: dev
1
2
3
4
5
6
7
8
9
10
11

配置,nacos配置约定,对应的地方必须一样

image-20210305175109417

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
1
  • 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 类型。

上图是通过控制台操作配置,也可以通过调用API操作配置。Spring Boot和Spring Cloud等使用示例,参考官网示例。配置历史版本回滚见控制台对应页面即可。

参考:

  • 官网文档 (opens new window)
  • Spring官方文档 (opens new window)

# 9.3 应用配置共享

# 9.3.1 同一服务不同环境共享:

上小节中,如果nacos控制台不配置 spring.profiles.active,表示这是应用在所有环境下的通用配置,例如dev和prod都可以读取到该配置,但是指定环境的配置优先于通用环境配置。

# 9.3.2 不同服务共享

有些配置在所有服务中都是一样的,例如数据库连接以及一些业务配置等。有两种配置方式

方式1、shared-dataids

spring.cloud.nacos.config:
  #共享配置的DataId,多个使用,分隔 
  #越靠后,优先级越高;common2.yml > common1.yaml 
  #.yaml后缀不能少,只支持 yaml/properties 
  shared-dataids: common1.yamL,common2.yamL 
  #哪些共享配置支持动态刷新,多个使用,分隔 
  refreshable-dataids: common1.yaml 
  server-addr: 127.0.0.1:8848 
  file-extension: yaml
1
2
3
4
5
6
7
8
9

方式二、ext-config

spring.cloud.nacos.config:
  server-addr: 127.0.0.1:8848 
  file-extension: yaml 
  ext-config:
    #需共享的DataId,yaml后缀不能少,只支持yaml/properties 
    #越靠后,优先级越高优先级common2.yaml > common1.yaml 
    - data-id: common1.yaml 
      #common1.yaml所在的group 
      group: DEFAULT_GROUP 
      #是否允许刷新,默认false 
      refresh: true 
    - data-id: common2.yaml 
      group: DEFAULT_GROUP 
      refresh: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 9.3.3 配置方式优先级

现在已经有3种配置方式了

  • nacos根据${prefix}、${spring.profiles.active}和${file-extension} 自动获取配置
  • ext-config
  • shared-dataids

三种方式的优先级如下:

自动配置 > ext-config > shared-dataids

# 9.4 引导上下文

# 9.4.1 引导上下文介绍

  • 引导上下文用于连接配置服务器,读取外部配置
  • 引导上下文是Application Context的父上下文

引导上下文的一个比较特殊的上下文,它用来==连接配置服务器,读取外部配置==,bootstrap.yml就是引导上下文的配置文件。对于我们的应用,他就是用于连接nacos,读取nacos里面的配置。

Application Context 和之前的 Ribbon、Feign也都是父子上下文关系

# 9.4.2 配置项优先级

当项目又有远程配置,又有本地配置,远程配置优先于本地配置

如果想让本地配置覆盖远程配置,可以根据以下方式配置。需要注意的是,这段配置要放在有远程配置中。

spring:
  cloud:
    config:
    #是否允许本地配置覆盖远程配置
    allow-override: true
    #是否一切以本地配置为准,默认false
    override-none: false
    #系统环境变量或系统属性才能覆盖远程配置文件的配置
    #本地配置文件中配置优先级低于远程配置,默认true
    override-system-properties: true
1
2
3
4
5
6
7
8
9
10

# 9.5 Nacos数据持久化

# 9.5.1 Nacos的各种数据

Nacos不同用途的数据存储在不同的目录,Nacos提供两种不同服务时的数据路径如下:

  • 服务发现组件
    • 数据存储在:~/nacos/naming
  • 配置服务器
    • 配置数据:$NACOS_HOME/data/derby-data
    • 快照等:~/nacos/config

Nacos的上述三种数据都是持久化存储的,其中配置服务器快照是用于提升性能和容灾的,配置数据是存储在Nacos内嵌的Apache下的数据库derby,配置数据存储在这里是不能用于生产环境的,内嵌的小型数据库高可用是个问题

可以使用derby客户端连接Nacos内嵌的derby数据库(IDEA就支持连接),路径在 $NACOS_HOME/data/derby-data,用户名密码都是 nacos

# 9.5.2 搭建生产可用的Nacos集群

要搭建生产可用的Nacos集群,要实现Nacos集群本身的高可用,以及数据库的高可用。

参考:

  • 官方部署文档 (opens new window)
  • 搭建生产可用的Nacos集群手记 (opens new window)
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19
第08章-认证授权
第10章-Sletuh调用链

← 第08章-认证授权 第10章-Sletuh调用链→

最近更新
01
第01章-RabbitMQ导学
02-10
02
第02章-入门RabbitMQ核心概念
02-10
03
第03章-RabbitMQ高级特性
02-10
更多文章>
Theme by Vdoing | Copyright © 2020-2023 CodeAshen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式