SpringCloud-Config

一、什么是配置中心?

当微服务过多的时候,每个微服务的配置很难集中管理。SpringCloud Config通过git代码托管来实现配置的集中管理。实现配置中心客户端获取远程的配置文件,并可以动态刷新,即时生效。

二、分布式配置中心应用场景

单体应用架构,配置信息的管理、维护并不会显得特别麻烦,手动操作就可以,因为就一个工程;

微服务架构,因为我们的分布式集群环境中可能有很多个微服务,我们不可能一个 一个去修改配置然后重启生效,在一定场景下我们还需要在运行期间动态调整配置 信息,比如:根据各个微服务的负载情况,动态调整数据源连接池大小,我们希望 配置内容发生变化的时候,微服务可以自动更新。

场景总结如下:

  • 1)集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理 是很重要的(一次修改、到处生效)

  • 2)不同环境不同配置,比如数据源配置在不同环境(开发dev,测试test,生产prod) 中是不同的

  • 3)运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连 接池大小等配置修改后可自动更新

  • 4)如配置内容发生变化,微服务可以自动更新配置

那么,我们就需要对配置文件进行集中式管理,这也是分布式配置中心的作用。

三、配置中心存在的意义

一个应用中不只是代码,还需要连接资源和其它应用,经常有很多需要外部设置的项去调整应用行为,如切换不同的数据库,设置功能开关等。

随着系统微服务的不断增加,首要考虑的是系统的可伸缩、可扩展性好,随之就是一个配置管理的问题。各自管各自的开发时没什么问题,到了线上之后管理就会很头疼,到了要大规模更新就更烦了。

而且你不可能停止你的服务集群去更新的你配置,这是不现实的做法,因此Spring Cloud配置中心就是一个比较好的解决方案

常见的配置中心的实现方法有:

  • 硬编码(缺点:需要修改代码,风险大)

  • 放在xml等配置文件中,和应用一起打包(缺点:需要重新打包和重启)

  • 文件系统中(缺点:依赖操作系统等)

  • 环境变量(缺点:有大量的配置需要人工设置到环境变量中,不便于管理且依赖平台)

  • 云端存储(缺点:与其他应用耦合)

Spring Cloud Config就是云端存储配置信息的,它具有中心化、版本控制、支持动态更新、平台独立、语言独立等特性。其特点是:

  • 提供服务端和客户端支持(spring cloud config server和spring cloud config client)

  • 集中式管理分布式环境下的应用配置

  • 基于Spring环境,无缝与Spring应用集成

  • 可用于任何语言开发的程序

  • 默认实现基于git仓库,可以进行版本管理

  • 可替换自定义实现

四、如何使用

目前SpringCloud Config的使用主要是通过Git/SVN方式做一个配置中心,然后每个服务从其中获取自身配置所需的参数。SpringCloud Config也支持本地参数配置的获取。

如果使用本地存储的方式,在application.properties 或application.yml 文件添加 spring.profiles.active=native 配置即可,它会从项目的 resources路径下读取配置文件。如果是读取指定的配置文件,那么可以使用 spring.cloud.config.server.native.searchLocations = file:D:/properties/来读取。

1、服务端

首先是服务端这块,首先创建一个注册中心,为了进行区分,创建一个springcloud-config-eureka的项目

application.properties配置信息:

配置说明:

  • spring.application.name: 这个是指定服务名称

  • server.port: 服务指定的端口

  • eureka.client.register-with-eureka: 表示是否将自己注册到Eureka Server,默认是true

  • eureka.client.fetch-registry: 表示是否从Eureka Server获取注册信息,默认为true

  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址

服务端这边只需要在SpringBoot启动类添加@EnableEurekaServer注解就可以了,该注解表示此服务是一个服务注册中心服务。

代码示例:

创建好了注册中心之后,我们再来创建一个配置中心,用于管理配置。

创建一个springcloud-config-server的项目。然后在application.properties配置文件添加如下配置:

配置说明:

  • spring.application.name: 这个是指定服务名称

  • server.port:服务指定的端口

  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址

  • spring.cloud.config.server.git.uri: 配置的Git仓库的地址

  • spring.cloud.config.server.git.search-paths: git仓库地址下的相对地址 多个用逗号","分割

  • spring.cloud.config.server.git.username: git仓库的账号

  • spring.cloud.config.server.git.password: git仓库的密码

注:如果想使用本地方式读取配置信息,那么只需将spring.cloud.config.server.git的配置改成spring.profiles.active=native,然后在resources路径下新增一个文件即可。

这里为了进行本地配置文件测试,新建一个configtest.properties配置文件,添加如下内容:

代码这块也很简单,在程序主类中,额外添加@EnableConfigServer注解,该注解表示启用config配置中心功能。代码如下:

完成上述代码之后,我们的配置中心服务端已经构建完成了。 2、客户端

我们新建一个springcloud-config-client的项目,用于做读取配置中心的配置。pom依赖还是和配置中心一样,不过需要新增一个配置,用于指定配置的读取。

创建一个bootstrap.properties文件,并添加如下信息:

配置说明:

  • spring.cloud.config.name: 获取配置文件的名称

  • spring.cloud.config.profile: 获取配置的策略

  • spring.cloud.config.label: 获取配置文件的分支,默认是master。如果是是本地获取的话,则无用

  • spring.cloud.config.discovery.enabled: 开启配置信息发现

  • spring.cloud.config.discovery.serviceId: 指定配置中心的service-id,便于扩展为高可用配置集群

  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址

注:上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为bootstrap.properties的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。需要注意的是eureka.client.serviceUrl.defaultZone要配置在bootstrap.properties,不然客户端是无法获取配置中心参数的,会启动失败!

application.properties配置

配置说明:

程序主类代码,和之前的基本一致。代码如下:

代码示例:

为了方便查询,在控制中进行参数的获取,并返回。@Value注解是默认是从application.properties配置文件获取参数,但是这里我们在客户端并没有进行配置,该配置在配置中心服务端,我们只需指定好了配置文件之后即可进行使用。

代码示例:

到此,客户端项目也就构建完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code.song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值