在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

  如果微服务架构中没有使用统一配置中心时,所存在的问题:

  • 配置文件分散在各个项目里,不方便维护

  • 配置内容安全与权限

  • 更新配置后,项目需要重启

  nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动

    

    

  nacosSpring Cloud的整合:

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

${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默认为所属工程配置spring.application.name 的值(即:nacos-provider),也可以通过配置项 spring.cloud.nacos.config.prefix来配置;

  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型;默认为 properties ;

  

  

  即 dataId 为 配置所属工程的spring.application.name的值 + "." + properties/yml;

  官方文档:

  https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

  https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

   

  2.配置内容:

  项目中易变的内容

  • 从配置中心读取配置

  添加依赖:

 <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>

  版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

  

  在 bootstrap.yml中配置 Nacos server 的地址和应用名

spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
# 该配置影响统一配置中心中的dataId,之前已经配置过
application:
name: nacos-provider

  注意:bootstrap.yml添加了spring.application.name,在appliation.yml不需要再添加;

  之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。在springboot工程中,bootstrap.properties的加载优先级更高

  

@RefreshScope
@RestController
public class ProviderController { @Value("${DevConfig}")
private String devConfig; @GetMapping("invoke")
public String invoke() {
return LocalTime.now() + " invoke,devConfig:" + devConfig;
}
}

  

  

  调用结果:

  

  • 名称空间切换环境

  在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离;

  

  可以发现有四个名称空间:public(默认)以及我们自己添加的3个名称空间(prod、dev、test),可以点击查看每个名称空间下的配置文件,当然现在只有public下有一个配置。

  默认情况下,项目会到public下找 服务名.properties文件。

  接下来,在dev名称空间中也添加一个nacos-provider.properties配置。这时有两种方式:

  1. 切换到dev名称空间,添加一个新的配置文件。缺点:每个环境都要重复配置类似的项目

  2. 直接通过clone方式添加配置,并修改即可(推荐)

  

  编辑

    

  在服务提供方nacos-provider中切换命名空间,修改bootstrap.yml添加如下配置

spring:
cloud:
nacos:
config:
namespace: 288ad42c-c8e0-4b92-b8df-7d7883ad8507

  

  namespace的值为:

    

  

  重启服务,调用结果:

  

  • 回滚配置

  

  

  • 加载多配置文件

  偶尔情况下需要加载多个配置文件。假如现在dev名称空间下有三个配置文件:nacos-provider.properties、redis.properties、jdbc.properties

  

  

    

  

  nacos-provider.properties默认加载,怎么加载另外两个配置文件?

  在bootstrap.yml文件中添加如下配置:

spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
extension-configs:
- refresh: true
data-id: redis.properties
- refresh: true
data-id: jdbc.properties

  

  修改上面的代码:

@RefreshScope
@RestController
public class ProviderController { @Value("${DevConfig}")
private String devConfig; @Value("${jdbc.url}")
private String jdbcUrl; @Value("${redis.url}")
private String redisUrl; @GetMapping("invoke")
public String invoke() {
return LocalTime.now() + " invoke,devConfig:" + devConfig +
",jdbcUrl:" + jdbcUrl + ",redisUrl:" + redisUrl;
}
}

  

  

  • 配置的分组

  在实际开发中,除了不同的环境外。不同的微服务或者业务功能,可能有不同的redis及mysql数据库,也就说每个微服务项目可能会有相应的开发环境,测试环境,预发环境,生产环境等;

  区分不同的环境我们使用名称空间(namespace),区分不同的微服务或功能,使用分组(group)

  也可以反过来使用,名称空间和分组只是为了更好的区分配置,提供的两个维度而已;

  

  新增一个redis.properties,所属分组为nacos-provider:

  

  

  现在开发环境中有两个redis.propertis配置文件,一个是默认分组(DEFAULT_GROUP),一个是provider组

  默认情况下从DEFAULT_GROUP分组中读取redis.properties,如果要切换到nacos-provider分组下的redis.properties,需要修改如下配置:

spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
extension-configs:
- refresh: true
group: nacos-provider
data-id: redis.properties
- refresh: true
data-id: jdbc.properties

  

  

Nacos配置中心使用的更多相关文章

  1. SpringBoot使用Nacos配置中心

    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云 ...

  2. Nacos配置中心

    本文介绍spring cloud 集成 nacos案例 官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html](https://nacos.io/zh ...

  3. Spring Cloud 系列之 Alibaba Nacos 配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  4. 微服务从nacos配置中心获得配置信息

    一,安装nacos, 略 二,创建父工程和微服务工程 service1, service2,以idea为例 1, new -> project -> Maven -> 填写group ...

  5. Nacos配置中心和服务的注册发现

    在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...

  6. Spring Cloud Config、Apollo、Nacos配置中心选型及对比

    Spring Cloud Config.Apollo.Nacos配置中心选型及对比 1.Nacos 1.1 Nacos主要提供以下四大功能 2.Spring Cloud Config 3.Apollo ...

  7. Spring Cloud Alibaba(5)---Nacos(配置中心)

    Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...

  8. 【Nacos】Springboot整合Nacos配置中心(二) 多环境配置

    本篇随笔接上一篇文章:Springboot整合Nacos配置中心(一),主要记录Nacos多环境的配置的方法 Nacos多环境的配置 方法一: 1.在项目中的bootstrap.yaml文件中配置激活 ...

  9. Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富- 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服 ...

随机推荐

  1. Springboot定时任务@Scheduled注解形式,参数详解

    参数详解 1.占位符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1 ...

  2. (数据科学学习手札95)elyra——jupyter lab平台最强插件集

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 jupyter lab是我最喜欢的编辑器,在过往 ...

  3. Thread、ThreadLocal源码解析

    今天来看一下Thread和ThreadLocal类的源码. 一.Thread (1)首先看一下线程的构造方法,之后会说每种参数的用法,而所有的构造函数都会指向init方法 //空构造创建一个线程 Th ...

  4. Vue环境搭建、创建与启动、案例

    vue环境搭建 """ 1) 安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 2) 安装cnpm npm install - ...

  5. switch-case 选择语句

    0. 语句模型 Go 里的选择语句模型是这样的 switch 表达式 { case 表达式1: 代码块 case 表达式2: 代码块 case 表达式3: 代码块 case 表达式4: 代码块 cas ...

  6. jdk环境配置(Windows)

    电脑>属性>高级系统设置>环境变量 1 创建JAVA_HOME,值是你的刚刚jdk的安装目录,比如 C:\Program Files (x86)\Java\jdk1.8.0_101 ...

  7. 小白也能看懂的Redis教学基础篇——redis神秘的数据结构

    各位看官大大们,周末好! 作为一个Java后端开发,要想获得比较可观的工资,Redis基本上是必会的(不要问我为什么知道,问就是被问过无数次).那么Redis是什么,它到底拥有什么神秘的力量,能获得众 ...

  8. 拉格朗日乘子法 Lagrange multipliers

  9. Linux知识点笔记

    Linux启动脚本 rcS文件,rcS文件位于系统根目录下的"/etc/init.d"下.  rcS文件本质是一个bash shell脚本,因此遵循bash脚本的语法规则. [1] ...

  10. IntelliJ IDEA Commons IO环境搭建

    IntelliJ IDEA版本信息 1.打开.或新建工程之后,点击菜单File > Project Structure... 2.在Project Structure窗口中,选Project S ...