Spring Cloud Config 5 分钟快速指南

"阅读本文大约需要 5 分钟"

近几年微服务的架构成为主流,而这种架构模式的变迁也给架构师和开发人员带来了更大的挑战,对于中小型公司,选择一个合适的微服务框架就变的十分重要。Spring 在 Netflix 开源的微服务框架的基础上提供 Spring Cloud,为微服务应用提供各方面的基础支持。我会对 Spring Cloud 中的各个组件做一个入门的介绍,帮助大家在最短的时间了解该组件的作用,并能快速的搭建,部署 Spring Cloud。

今天这篇文章的主角是 Spring Cloud Config 组件,让我们开始吧。

Spring Cloud Config 是什么?

顾名思义 Spring Cloud Config 是解决配置管理问题的。大家在日常工作中一定遇到过程序中需要一些参数化的配置,直白的做法是将这些参数放在外部的配置文件中,在系统启动或是运行时再读取其中的参数内容。但是在微服务的架构下,我们的需求可能更为复杂。最小范围我们希望配置满足以下的需求:

  • 应用可能部署多个副本,我们希望能够共享一份配置文件,避免修改一个参数需要改动多个文件的情况出现
  • 配置参数能够有版本管理功能,当出现问题时可以随时回退,并能从变更历史上来排查异常
  • 支持多维度的管理层级,针对不同环境和应用可以区分不同的配置参数

Spring Cloud Config 不仅满足以上的需求,还额外提供了加密等特性的配置管理中心。Spring Cloud Config 本身也是一个 Spring Boot 应用,因此和 Spring Boot 的应用集成更为简单,且提供了更多特有的特性。下面就让我们快速搭建一个 Spring Cloud Config 应用,并演示如何使用。

搭建 Spring Cloud Config Server

如之前提到的,Spring Cloud Config 本身就是一个 Spring Boot 的应用,因此使用 Spring Initializr 可以快速搭建一个 Spring Cloud Config Server。Spring Initializr 的使用可以参考我之前的 <<Spring Boot 5 分钟快速指南>>,与之前开发 Spring Boot 唯一不同的是在依赖项这里只需要添加 Config Server 一项即可,参考下图:

Spring Cloud Config Dep.png

下载并解压缩项目之后,打开 Spring Boot 的启动类,在类上增加一个 annotation,@EnableConfigServer 变可将当前的 Spring Boot 应用设定为 Spring Cloud Config Server。接着在项目目录下运行 ./mvnw spring-boot:run 便会运行当前项目。现在的配置情况下运行会抛出异常,观察出错信息,信息会提示我们没有设置 Spring Cloud Config 的 git uri 参数。

Spring Cloud Config 支持从 git 仓库中的文件读取配置信息,因此需要默认配置 git 仓库的路径。打开项目中的 application.properties 文件,增加一行配置 spring.cloud.config.server.git.uri=file://${user.home}/config-repo ,如果你是使用的 Windows,则需要在路径处多加一个斜杠,即 spring.cloud.config.server.git.uri=file:///${user.home}/config-repo。接着我们可以在配置的目录下创建一个 git 仓库,并添加相关的配置文件,具体代码如下:

$ cd $HOME
$ mkdir config-repo
$ cd config-repo
$ git init .
$ echo info.foo: bar > application.properties
$ git add -A .
$ git commit -m "Add application.properties"

再次运行 ./mvnw spring-boot:run 就能成功运行 Spring Cloud Config Server 了。我们先可以使用 curl 命令来测试一下 Spring Cloud Config Server 是否工作正常。

$ curl localhost:8888/application-default.properties
$ info.foo: bar

运行上述的命令可以看到我们对应的 git 仓库目录下定义的属性文件内容,在这里要介绍一下 Spring Cloud Config 内建的目录格式。

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • application: 为应用名称,在 Spring Boot 中可以通过 spring.application.name 来设置,默认为 application
  • profile: 为应用启动的所使用的 profile 名称,可以在启动时通过命令行参数进行设定
  • labe: 则为 git 仓库的 label 属性,这里默认为 master

运行客户端

在 Server 端定义了属性文件后,可以在应用中通过 http 形式来获取其中的参数,如果使用 Spring Boot 开发应用程序,可以更加方便的和 Spring Cloud Config Server 集成,现在就让我们看看对应的示例。

首先还是使用 Spring Initializr 来初始化项目配置,不过这次需要添加的依赖项为 Config Client,如下图:

Spring Cloud Config Client Dep.png

解压项目后,首先修改项目中 application.properties ,增加如下的配置:

server.port=9000
spring.application.name=client-app
spring.cloud.config.uri=http://localhost:8888

因为我们会把 client 和 server 运行在同一台服务器上,因此我们修改 client 的运行端口为 9000, 同时我们设定我们的应用名为 client-app,而 spring.cloud.config.uri 参数配置了我们应用需要连接的配置服务器地址。

按照之前介绍的 Spring Cloud Config 的 url 匹配规则,我们将 git 仓库中的 application.properties 重命名为 client-app.properites,并且在文件中新增一行配置 friend.name: Joshua

在 client 应用中,新增一个 Controller,具体代码如下:

@RestController
public class GreetingController {
    @Value("${friend.name}")
    private String friendName;

    @GetMapping("/greeting")
    public String greeting() {
        return String.format("Hello, %s", friendName);
    }
}

以上代码,我们从配置中读取 friendName 的值,在当前环境中会从 Spring Cloud Config Server 中读取,并注入给 Controller。

我们启动 client 应用,然后使用 curl 访问应用,可以看到如下的效果:

$ curl http://localhost:9000/gretting
$ Hello, Joshua

就这样,我们很方便的搭建了一套集中化的配置管理中心和使用它的客户端程序。

结语

Spring Cloud Config 提供了简单易用的集中化配置管理功能,简单易用,而且能很方便的和 Spring Boot 应用进行集成。如果你想深入了解 Spring Cloud 的其他组件,或想掌握更多 Spring Cloud Config 的其他高级用法,可以关注我们的公众号,还能获得实例项目的源代码,赶快关注吧!

15年从业经验,不仅在国内著名的大型金融集团做过甲方,担任高级系统架构专家角色,也在第一梯队的互联网公司金融部门做过数据智能相关工作。

也曾任职于大型系统集成商,负责保险,银行核心系统的落地和实施,也在创业团队从0到1研发产品,在业界获得很高的占有量。

如果感兴趣可以加我公众号,搜索“且把金针度与人”或个人微信


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