专栏首页程序大视界SpringCloud分布式配置中心

SpringCloud分布式配置中心

一、什么是分布式配置中心?

Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它实现了对服务端和客户端对SpringEnvironment和PropertySource抽象的映射,所以它除了适用于Spring构建的应用程序,也可以在任何其他语言运行的应用程序中使用。作为一个应用可以通过部署管道来进行测试或者投入生产,我们可以分别为这些环境创建配置,并且在需要迁移环境的时候获取对应环境的配置来运行。

二、使用配置中心的好处

当我们系统业务扩展到一定程度的时候;免不了会增加很多的配置文件和信息,例如证书文件、接口对接的参数信息、数据库连接信息等;传统的单体式架构系统,SSH、SSM还是Struts等,只能是一个文件一个文件的增加堆积到项目系统中。每次更改配置信息的时候,都要重启服务器,影响线上业务浪费时间等。当配置文件数量达到一定程度的时候,整个项目就会看起来非常臃肿冗余,更甚者可能会拿错配置信息导致程序崩溃等。那么,这时候分布式系统采用的配置中心的优势就突出出来了。由业务拆分的多个模块系统的各配置文件,全部配置在配置中心统一管理;与程序分离,做到动态配置获取配置信息。无需重启服务器即可动态刷新加载配置信息。 搭建Config Server注册中心注解,开启Config Server

@EnableConfigServer
@SpringBootApplication
public class Application {

    public static void main(String[] args) {

        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }
}

中配置服务信息以及git信息;由于开发完成后,Config Server的svn权限以及配置信息等,都已做了限制权限,没法查阅。

配置仓库中,根据不同环境新建了下面四个配置文件:

  • didispace.properties
  • didispace-dev.properties
  • didispace-test.properties
  • didispace-prod.properties

同时创建一个config-label-test分支,并将各配置文件中的值用2.0作为后缀

URL与配置文件的映射关系如下:

/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties

/{label}/{application}-{profile}.properties

搭建好configServer后,就把服务注册到Eureka;经过zuul进行路由转发,以供各个服务模块可以调用。

客户端config Client调用服务端Server获取配置

pom.xml依赖

<dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-config</artifactId>

</dependency>

创建bootstrap.properties配置,来指定config server

#bootstrap.properties的加载也是先于application.properties

 

#bootstrap.properties配置,来指定config server

 

#对应前配置文件中的{application}部分

spring.application.name=didispace

#对应前配置文件中的{profile}部分

spring.cloud.config.profile=test

#对应前配置文件的git分支

spring.cloud.config.label=config-label-test

#配置中心的地址

spring.cloud.config.uri=http://localhost:7001/

#spring boot port

server.port=7002
  • spring.application.name:对应前配置文件中的{application}部分
  • spring.cloud.config.profile:对应前配置文件中的{profile}部分
  • spring.cloud.config.label:对应前配置文件的git分支
  • spring.cloud.config.uri:配置中心的地址

上面这些属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为config的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。

创建最基本的Spring Boot启动主类

@SpringBootApplication

public class Application {

    public static void main(String[] args) {

        new SpringApplicationBuilder(Application.class).web(true).run(args);

    }

}

config-client 工程中添加依赖监控模块,其中包含了/refresh刷新API

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-actuator</artifactId>

            <optional>true</optional>

</dependency>

在需要自动更新配置变量的Java类上,使用注解 @RefreshScope 修饰

以后当我们再更新git上面的配置文件后,在 config-client 端执行POST 请求 http://localhost:8080/refresh 就可以更新刷新配置变量到内存中了。

这样就做到,配置一个Config Server注册中心,在Gitlab下配置各模块和对应环境的配置信息;Confid Client通过Eureka经由Zuul网关路由读取到对应的配置;达到动态分布式配置中心读取的效果。

本文分享自微信公众号 - 程序大视界(nick_coding1024),作者:刘文正

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringCloud的@Value注解及GitLab配置使用

    使用SpringCloud进行微服务分布式开发,能够非常方便的构建高可用、高并发的大型web系统。

    刘文正
  • 一文看懂互联网支付系统架构

    什么是支付系统?自古以来,所有的商业活动都会伴随着经济的收款与付款行为。随着时代的发展,记录收付款行为的方式不断迭代:古代的钱庄通过手工(算盘)记账,工业社会通...

    刘文正
  • SpringCloud--Config Server配置中心学习总结

    使用分布式微服务开发和部署项目,其中的一个优势就是:使用分布式配置协调服务,达到统一配置存储和使用。

    刘文正
  • SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件

    Spring Boot使用一种非常特殊的PropertySource顺序,旨在允许合理地覆盖值。按以下顺序考虑属性(优先级从高到低):

    品茗IT
  • SpringBoot入门建站全系列(二十三)配置文件优先级及常用配置方式

    Spring Boot使用一种非常特殊的PropertySource顺序,旨在允许合理地覆盖值。按以下顺序考虑属性(优先级从高到低):

    品茗IT
  • 教程从头开始在Python中实现k最近邻居

    k近邻法(或简称为kNN)是一种易于理解和实现的算法,也是一种功能强大的工具。

    人工智能资讯小编
  • 「译」创建一个Hexo主题-Part2:其他页面

    在这个系列教程中,你将学习怎么从零开始制作一个 Hexo 主题。 在 part1 中,我们已经着手动工并创建了首页。在这篇文章中,我们将运用所学完成剩余的页面。

    Chor
  • springBoot 入门(二)—— 使用 spring.profiles.active来区分配置

    很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候...

    MickyInvQ
  • mac系统下搭建go语言环境

    1,首先查看是否安装go,或者安装版本 yishiyaonie:GO liuhanlin$ go versiongo version go1.5.1 darwi...

    李海彬
  • 与Ajax同样重要的jQuery(2)

    练习9: ² 点击button 打印radio checkbox select 中选中项的值 <script type="text/javascript" sr...

    Java帮帮

扫码关注云+社区

领取腾讯云代金券