Nacos(三)配置中心

我的设想

一个Spring项目在没有配置中心的时候,通常需要写4个配置文件,application.yml,application-dev.yml,application-prod.yml和application-test.yml。

一般来说application.yml定义了项目的一些基本信息,如srping.application.name,server.port,logging.level等基本信息,而数据库、mq等配置信息则可能需要根据不同的环境来进行配置,因此基本会放在其他三个配置中,并在application.yml中通过spring.profiles.active来指定项目环境。当使用nacos来进行项目的配置时,由于spring启动时需要从远程获取配置信息,所以从前application.yml相关的配置都需要在bootstrap.yml中,以此类推,dev、prod、test也是如此。差别在于,现在不需要将配置写在这些yml中了,只需要在项目的bootstrap*.yml中配置需要从远端获取Configuration的元数据即可由于没有具体实现过,所以还是来看看到底应该怎么做

添加nacos server配置

不管怎么样,将如dev、prod这些环境配置在nacos server上都是必须的,nacos支持非常多样化的配置。先来回顾一下nacos的namespace、Data ID、Group:

Namespace

命名空间,用于隔离用户配置。不同的命名空间可以有相同的Group和DataID。Namespace的一个常见场景是在不同的环境中区分和隔离配置,比如在开发和测试环境以及生产环境中。

Data ID

Data ID组成如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix的默认值就是spring.application.name,也可以通过spring.cloud.nacos.config.prefix配置

spring.profile.active即项目所在profile,如test、dev、prod,若为空,则Data ID会省略掉这一部分内容,可以通过spring.profiles-active配置

file-extension是配置内容的数据格式,目前支持properties和yaml,可以通过spring.cloud.nacos.config.file-extension配置

Group

群组,简单来说区分具有相同Data ID的配置集。

不难发现,要在nacos server上配置dev、prod配置有很多方法,我来简单列举一些:

  1. 设置多个namespace,每一个namespace存放不同环境的配置文件,项目在配置时只需指定namespace即可
  2. 设置一个namespace,统一使用DEFAULT_GROUP,通过Data ID中的${spring.profile.active}区分不同环境的配置文件,项目在配置时需要指定namespace和spring.active.profile
  3. 设置一个namespace,使用不同Group,项目在配置时需要指定namespace和Group
  4. 其实还有更多方案,比如使用dev、prod、test划分namespace,使用Group来划分不同的服务,不是也可以吗?……

ps:如果不指定namespace,则会使用默认的namespace,不过建议还是自己创建~

上面的方案对于当前项目来说都可用,但是从微服务配置的角度来说,到底哪个方案适合当前来用,才是最重要的。对于微服务来说,首先,一个完整的项目会涉及到多个服务,如日志服务、用户服务、订单服务。那么对于这些服务,我想我会考虑将其配置在不同的namespace中,即每一个服务对应一个namespace。

随后,将目标指向单个服务,在微服务中,每一个服务都会拥有多台实例,每一台实例在相同的环境中会使用相同的配置,回顾上面三个概念的介绍,可以发现namespace>Group>Data ID,因此,对于不同实例使用的不同环境配置,使用Group来加以区分,如Test_Group、Dev_Group、Prod_Group,随后通过Data ID来标识对应的环境配置。

当然,这里还有一个问题我是存疑的(是有关服务注册方面,所以对这里的操作影响不大,跳过不看也可)如果以服务来进行namespace划分,那么之后注册在namespace1的服务能否调用到注册在namespace2的服务呢?

因此,基于严谨认真的态度,决定使用第三种方案来做配置!

新建namespace

ui界面的操作就不展示了,比较简单,在左侧命名空间栏点进去找到添加按钮,命名空间自动生成就好了,空间名可以以服务名来标识,会比较清晰。

新建配置

这里用不同数据库作为两个环境的区分,前者为unit,后者为homstay

dev环境

Data ID:example.dev.yaml
Group:DEV_GROUP

配置内容:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/unit?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

prod环境

Data ID:example.dev.yaml
Group:DEV_GROUP

配置内容:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/homestay?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

项目中配置

nacos server配置完毕后,项目中需要获取对应的远程配置,则需要在bootstrap*.yml中进行相应的配置

bootstrap.yml

这里其实和application.yml一样,配置一些基本的属性,如本地端口,注册中心地址,配置中心地址,应用名以及使用环境

server:
  port: 8070

spring:
  cloud:
    nacos:
      config.:
        server-addr: localhost:8848
      discovery:
        server-addr: localhost:8848
  application:
    name: example
  profiles:
    active: dev

bootstrap-dev.yml

dev环境需要获取到nacos server的远程dev配置

spring:
  cloud:
    nacos:
      config:
        group: DEV_GROUP
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
        file-extension: yaml
      discovery:
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
  profiles: dev

bootstrap-prod.yml

prod环境需要获取到nacos server的远程prod配置

spring:
  cloud:
    nacos:
      config:
        group: PROD_GROUP
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
        file-extension: yaml
      discovery:
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
  profiles: prod

启动项目

修改Controller

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
    @Value("${spring.datasource.url}")
    private String dataBaseUrl;


    @RequestMapping("/str")
    public String str(){return dataBaseUrl;}
}

切换环境为dev,启动项目,访问localhost:8070/config/get

jdbc:mysql://localhost:3306/unit?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

切换为prod,启动项目,访问localhost:8070/config/get

jdbc:mysql://localhost:3306/homestay?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

发现获取到的数据库配置不一样了,到此,本次配置测试就完成啦~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 通过之前文章的学习我们已经学会了使用Nacos完成服务的注册与发现。同时也介绍了Spring Cloud中不同风格...
    匆匆岁月阅读 8,682评论 0 4
  • 配置管理 1.什么是配置中心?1.1什么是配置应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着...
    Gq赵阅读 15,561评论 0 10
  • 我是一名大三学生,掐指一算,我的学生时代已经余额不足。静静想来,过往已经模糊,未来却也迷茫。 大一新生,我...
    阿琴阅读 208评论 0 3
  • 为什么要记录今天呢?是因为传统节日的气氛下有点儿多愁善感了,又可能是因为我太无聊了。每年的今天都会和范女士去姥爷...
    乔颂伊阅读 262评论 1 2
  • 云南是我最喜欢的花,他长得很像你的,而且还是一串一串的。我觉得他应该就是由此得名的吧。铃兰大多数都是白色的。不过还...
    妙心语阅读 299评论 0 1