参考感谢

前言

前景回顾:

通过前面几篇介绍,已经基本了解了Nacos做为注册中心和配置中心的基本用法。

在实际开发中,通常一个系统会准备开发环境、测试环境、预发环境、正式环境

那么如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢

本文主要对Nacos作为配置中心时,如何对多环境配置文件进行读取进行论述。

我的环境

  • Windows10
  • JDK8
  • SpringCloud:Finchley.RELEASE
  • SpringBoot:2.0.4.RELEASE
  • spring-cloud-alibaba-dependencies:0.2.2.RELEASE
  • Nacos-server:1.0.1

本文的项目Demo继续沿用 Nacos(四)中的工程nacos-config,若小伙伴还没有之前的环境,可至源码地址中下载

Data ID方案

在上一篇文章中有对Data ID进行过介绍,它的命名规则为:${prefix}-${spring.profile.active}.${file-extension}

通过其中的spring.profile.active属性即可进行多环境下配置文件的读取

一起来试一下吧~

新建配置

1、启动Nacos-Server后,创建配置文件Data ID为:nacos-config-dev.yml, 其配置如下:

server:
port: 9980
nacos:
config: 这里是dev环境

2、继续创建配置文件Data ID为:nacos-config-test.yml, 其配置如下:

server:
port: 9981
nacos:
config: 这里是test环境

多环境测试

通过Idea启动nacos-config项目,并指定spring.profiles.active,通过不同的环境进行启动

通过上面的配置,将项目分为dev、test两个环境启动后,进行测试

访问 http://127.0.0.1:9980/getValue 返回:这里是dev环境

访问 http://127.0.0.1:9981/getValue 返回:这里是test环境

可以看到,分别以dev、test启动后相应的读取到不同的配置,dev环境读取到启动端口为9980,test读取到启动端口9981

Group方案

上面介绍了通过指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置

这里也可以不用DataID,直接通过Group实现环境区分

注:这种方式不太推荐,切换不灵活,需要切换环境时要改Gruop配置

新建配置

1、创建配置文件Data ID为:nacos-config.yml, Group为:DEV_GROUP, 其配置如下:

server:
port: 9980
nacos:
config: 这里是dev环境

2、继续创建配置文件Data ID为:nacos-config.yml, Group为:TEST_GROUP, 其配置如下:

server:
port: 9981
nacos:
config: 这里是test环境

这里的两个配置文件他们的DataID相同但是Group不同

修改项目中的配置文件bootstrap.yml

在config下增加一条group的配置,指定配置文件所在的group,可配置为DEV_GROUPTEST_GROUP

spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
group: DEV_GROUP

启动测试

将group配置为DEV_GROUP启动进行测试

访问 http://127.0.0.1:9980/getValue 返回:这里是dev环境

将group配置为TEST_GROUP启动进行测试

访问 http://127.0.0.1:9981/getValue 返回:这里是test环境

通过指定group的方式启动,DEV_GROUP读取到启动端口为9980,TEST_GROUP读取到启动端口9981

说明

只通过Group来进行多环境的区分的方式我不推荐使用,因为涉及到了多环境自然就会改变spring.profile.active,而profile一旦生效,配置文件就会依据DataID的规则进行查找。所以Group的方式仅作参考。

Group的合理用法应该是配合namespace进行服务列表和配置列表的隔离和管理

Namespace方案

Namespace命名空间进行环境隔离也是官方推荐的一种方式。Namespace的常用场景之一是不同环境的配置的区分隔离,例如:开发测试环境和生产环境的资源(如配置、服务)隔离等。

创建命名空间

创建命名空间DEVTEST,不同的命名空间会生成相应的UUID,如下图

新建配置文件

1、在命名空间DEV下创建DataID为:nacos-config.yml,Group为默认值的配置,配置如下:

server:
port: 9980
nacos:
config: 这里是DEV命名空间

2、在命名空间TEST下创建DataID为:nacos-config.yml,Group为默认值的配置,配置如下:

server:
port: 9981
nacos:
config: 这里是TEST命名空间

修改项目中的配置文件bootstrap.yml

在config下增加一条namespace的配置,指定当前配置所在的命名空间ID。注意是命名空间ID!!!!配置如下

spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
namespace: edbd013b-b178-44f7-8caa-e73071e49c4d

启动测试

将namespace配置为DEV的ID:edbd013b-b178-44f7-8caa-e73071e49c4d,启动进行测试

访问 http://127.0.0.1:9980/getValue 返回:这里是DEV命名空间

将namespace配置为TEST的ID:0133bd1e-25c3-4985-96ed-a4e34efdea2e,启动进行测试

访问 http://127.0.0.1:9981/getValue 返回:这里是TEST命名空间

通过指定namespace的方式启动,均可读取到对应的启动端口和相关配置

说明

Namespace是官方推荐的环境隔离方案,确实有他的独到之处,使用namespace这种方案,同时可以与DataID+profile的方式结合

同时释放Group的限制,大大提高多环境配置管理的灵活性。

总结

通过上面三种方案的介绍,想必大家对于多环境下的配置读取方式应该有所选择

  • DataID: 适用于项目不多,服务量少的情况。
  • Group:实现方式简单,但是容易与DataID方案发生冲突,仅适合于本地调试
  • Namespace:实现方式简单,配置管理简单灵活,同时可以结合DataID共同使用,推荐这种方案


Nacos(五):多环境下如何“读取”Nacos中相应的配置的更多相关文章

  1. (转 留存)Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤

    Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤 标签: NodeJSnpmbower 2015-07-17 16:38 3016人阅读 评论(0) 收藏 举报  分类: G ...

  2. Linux环境下shell和vim中乱码原因及消除办法

    shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...

  3. Windows环境下在IDEA编辑器中spark开发安装步骤

    以下是windows环境下安装spark的过程: 1.安装JDK(version:1.8.0.152) 2.安装scala(version:2.11/2.12) 3.安装spark(version:s ...

  4. linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):

    Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置 ...

  5. Linux环境下Gitblit服务搭建及秘钥配置

    一.安装gitblit服务 1.下载地址 https://pan.baidu.com/s/1wQ3TEE_gw5xZvyFPZB9xFg 2.上传至linux服务器并解压缩 tar xvf gitbl ...

  6. 分享一个linux环境下快速读取行数的命令

    最初是因为我需要计算一天的日志行数,如果用传统意义上的cat  a.log |wc -l的话因为是单线程,所以需要计算半小时的样子,后来同组的小伙伴教了我一个方法可以有效提高计算速度,将计算时间减半. ...

  7. linux环境下java读取sh脚本并执行

    Process process;           String cmd = "/home/ty/t.sh";//这里必须要给文件赋权限 chmod u+x fileName; ...

  8. SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...

  9. SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)

    1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清楚的认识到以下的问题,在实际的项目开发之中,尤其是 Java 的 MVC ...

随机推荐

  1. 题解 AT2243 【正方形のチップ】

    题意:在格子纸上: 给出格子的单位长度C,和在上面圆的半径R; 求出: 圆中有多少个完整的小正方形.(单位长度*单位长度) #include<cstdio> #include<cma ...

  2. LeetCode第2题

    // 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.//// 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  3. java反射构建对象和方法的反射调用

    Java反射技术应用广泛,其能够配置:类的全限定名,方法和参数,完成对象的初始化,设置是反射某些方法.可以增强java的可配置性. 1.1 通过反射构建对象(无参数): 例如我们使用 ReflectS ...

  4. 个人永久性免费-Excel催化剂功能第35波-Excel版最全单位换算,从此不用到处百度找答案

    全球化的今天,相信我们经常可以有机会接触到外国的产品,同时我们也有许多产品出口到外国,国与国之间的度量单位不一,经常需要做一些转换运算,一般网页提供这样的转换,但没有什么比在Excel上计算来得更为方 ...

  5. MapReduce之提交job源码分析 FileInputFormat源码解析

    MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...

  6. Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货

    一.什么是 ES Nested 嵌套 Elasticsearch 有很多数据类型,大致如下: 基本数据类型: string 类型.ES 7.x 中,string 类型会升级为:text 和 keywo ...

  7. Java 面向对象面试题

    1.Java面向对象的三种特性 封装:封装是把数据和操作数据的方法封装起来,对数据的访问只能通过已定义的接口进行访问. Java的四种访问控制符: - 默认的(default):不使用任何修饰符,在同 ...

  8. HTTP 400 Bad request 原因

    我在使用httpclient 发送http请求时遇到问题,请求报 400 Bad request.网上都在说下面这两个原因 400 是 HTTP 的状态码,主要有两种形式: 1.bad request ...

  9. 动态规划_Sumsets_POJ-2229

    Farmer John commanded his cows to search . Here are the possible sets of numbers that sum to : ) +++ ...

  10. SSM - Mybatis SQL映射文件

    MyBatis 真正的力量是在映射语句中.和对等功能的jdbc来比价,映射文件节省很多的代码量.MyBatis的构建就是聚焦于sql的. sql映射文件有如下几个顶级元素:(按顺序) cache配置给 ...