前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Config

跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Config

作者头像
用户1516716
发布2019-07-10 15:13:25
4310
发布2019-07-10 15:13:25
举报
文章被收录于专栏:A周立SpringCloud

经过前文讲解,至此,微服务架构已经日趋完善——现在已经可以做一个大型的应用了!然而,随着项目的迭代,微服务数目往往与日俱增,如何高效地管理配置成为我们必须解决的问题。本节来讨论如何使用Spring Cloud Config管理配置。

为什么要使用配置中心

  • 集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的;
  • 不同环境,不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的;
  • 运行期间可动态调整。例如,我们可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不停止微服务;
  • 配置修改后可自动更新。如配置内容发生变化,微服务能够自动更新配置。

Spring Cloud Config简介

Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分。由于Config Server和Config Client都实现了对Spring Environment和PropertySource抽象的映射,因此,Spring Cloud Config非常适合Spring应用程序,当然也可与任何其他语言编写的应用程序配合使用。

Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、MySQL、本地文件系统或Vault存储配置,本博客以Git为例进行讲解),因此可以很方便地实现对配置的版本控制与内容审计。

Config Client是Config Server的客户端,用于操作存储在Config Server中的配置属性。引入Spring Cloud Config后的架构如下:

TIPS

Spring Cloud Config的GitHub:https://github.com/spring-cloud/spring-cloud-config

编写Config Server

示例

1 加依赖

代码语言:javascript
复制
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2 加注解: @EnableConfigServer

3 写配置:

代码语言:javascript
复制
server:
  port: 8080
spring:
  application:
    name: microservice-config-server
  cloud:
    config:
      server:
        git:
          # Git仓库地址
          uri: https://git.oschina.net/itmuch/spring-cloud-config-repo.git
          # Git仓库账号
          username:
          # Git仓库密码
          password:

路径规则

Spring Cloud Config Server提供了RESTful API,可用来访问存放在Git仓库中的配置文件。

代码语言:javascript
复制
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

其中的{appliation}、{profile}、{label} 都是占位符。

TIPS

事实上,可使用Spring Cloud Config实现配置的“继承”与“组合”,举个例子——

假设有一个应用: microservice-foo ,其profile是dev,那么其实Spring Cloud Config会查找如下几个文件:

  • microservice-foo-dev.yml
  • microservice-foo.yml
  • application-dev.yml
  • application.yml

对于相同属性的配置,从上至下优先级逐渐递减;最终获得的配置属性是四个文件的组合。由此,不难分析,可如下规划几个配置文件:

  • microservice-foo-dev.yml 作为指定应用在指定profile下的配置文件
  • microservice-foo.yml 作为制定应用在任何profile下都通用的配置文件
  • application-dev.yml 作为所有应用在指定profile下的配置文件
  • application.yml 作为所有应用在任何profile下都通用的配置文件

测试

  • 访问 http://localhost:8080/microservice-foo-dev.yml 可访问到Git仓库的 microservice-foo-dev.properties 并组合 application.properties

集成Config Client

编码

1 加依赖

代码语言:javascript
复制
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

2 加配置:applicaiton.yml

代码语言:javascript
复制
server:
  port: 8081

3 加配置:bootstrap.yml

代码语言:javascript
复制
spring:
  application:
    name: microservice-foo    # 对应config server所获取的配置文件的{application}
  cloud:
    config:
      uri: http://localhost:8080/
      profile: dev            # profile对应config server所获取的配置文件中的{profile} 
      label: master           # 指定Git仓库的分支,对应config server所获取的配置文件的{label}

其中:

spring.application.name:对应Config Server所获取的配置文件中的{application} ;

spring.cloud.config.uri:指定Config Server的地址,默认是http://localhost:8888 ;

spring.cloud.config.profile:profile对应Config Server所获取的配置文件中的{profile} ;

spring.cloud.config.label:指定Git仓库的分支,对应Config Server所获取配置文件的{label}。

值得注意的是,以上属性应配置在bootstrap.yml,而不是application.yml中。如果配置在application.yml中,该部分配置就不能正常工作。例如,Config Client会连接spring.cloud.config.uri的默认值 http://localhost:8888 ,而并非我们配置的 http://localhost:8080/

Spring Cloud有一个“引导上下文”的概念,这是主应用程序上下文(Application Context)的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载 application.* (yml或properties)中的属性不同,引导上下文加载 bootstrap.* 中的属性。配置在 bootstrap.* 中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。

4 写代码

代码语言:javascript
复制
@RestController
public class ConfigClientController {
  @Value("${profile}")
  private String profile;

  @GetMapping("/profile")
  public String hello() {
    return this.profile;
  }
}

测试

访问 http://localhost:8081/profile 可返回Git仓库中的配置属性。

配套代码

Config Server

  • GitHub:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-config-server
  • Gitee:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-config-server

Config Client

  • GitHub:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-config-client
  • Gitee:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-config-client
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT牧场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要使用配置中心
  • Spring Cloud Config简介
  • 编写Config Server
    • 示例
      • 路径规则
        • 测试
        • 集成Config Client
          • 编码
            • 测试
            • 配套代码
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档