首页 > 其他分享 >Spring Cloud之统一配置中心Config初体验

Spring Cloud之统一配置中心Config初体验

时间:2022-12-07 21:33:28浏览次数:63  
标签:初体验 服务 配置文件 Spring 配置 config Config properties

  对于配置的重要性懂的都懂。在普通的单体应用中通常使用配置文件管理应用的所有配置(*.yml/*.properties),但随着微服务数量会在产品中不断增加,考虑系统的可伸缩性和可扩展性时就必须考虑配置管理问题 。在长期的实践中,要做好微服务的配置管理,通常需要处理好以下内容:

  1)在微服务架构中配置数据与服务实例不要在同一个地方,最好各自独立分开。

  2)在每个微服务中对于通过硬编码的方式从某个配置文件、远程仓库或者数据中读取 配置数据是拒绝的。最好是通过一种更通用的方式让微服务可快速加载这些配置资源。

  3)虽然微服务是分布式的,但是对于配置文件的管理最好的集中式的。通过对配置文件的集中式管理可以非常方便地对微服务的配置进行统一修改和发布,并能够建立版本机制以便后续进行配置数据的回溯。

  4)当采用集中式的配置后,如何能够保证配置服务的高可用性也是一个非常重要的考量因素,否则一旦配置服务不可用,就会造成整个服务的“雪崩”效应。

  SpringCloud提供的Config子项目就支持以上需要处理的内容,具有中心化、版本控制、支持动态更新和语言独立等特性。Spring Cloud Config的两个角色类似Eureka——Server和Client。

  Server作为配置中心的服务端承担如下重任:

    1)当客户端获取配置时,服务端及时从仓库中获取配置副本,从而保障配置数据未最新。

    2)支持从yml/json/properties等文件加载配置。

    3)配合Eureka可以实现服务发现,配合CloudBus可实现配置推送更新。

    4)默认配置存储基于git仓库,从而支持 配置版本管理。

  对于Client则相对简单,即各个微服务只需在引导配置文件(bootstrap.yml/properties)中声明所使用的的配置服务器地址即可。

  关于配置中心Config的体验实操,从最简单的微服务配置升级改造开始。其过程中遇到了很多小问题,下面将以注意事项一一记录:

  未进行配置集中管理的项目结构如下:

          

  其中:1)parent就是整个项目的父类

     2)service-discovery就是Eureka作为服务注册

     3)product-service是服务消费端

     4)user-service是服务提供端

          

  将以上项目进行升级为配置版本化管理的项目,如下:

  1)建立config服务端

    项目结构:

          

    配置xml:

          

     启动类(Application):

          

     配置文件(application.properties):

          

     创建应用配置文件:

      productservice.properties:

        

     userservice.properties:

        

     以上两个配置文件上传至配置git仓库,就是config服务配置文件中的,注意上传文件名是有一定规则的:{application}-{profile}.yml 或者 {application}-{profile}.properties,其中, application为应⽤名称, profile指的是环境(⽤于区分开发环境,测试环境、⽣产环境等)

    启动Config服务,在Postman中输入http://localhost:8888/productservice/default并访问,可以看到git仓库中的配置文件已经被配置服务器正确读取到了,具体如下图示:

        

  对于config客户端的升级改造主要是配置文件,如下:

  2)改造product端

    xml中添加:

          

     对于Spring Boot应用来说有两个配置文件,一个是application.properties配置文件,另一个是bootstrap.properties。应用在启动时会根据bootstrap.properties配置文件创建一个引导(Bootstrp Contex)上下文的文件。该文件将负载从外部加载配置属性并进行相应的解析,同时作为应用(Application  Context)上下文的符上下文。此外这两个上下文虽然具有不同的含义,但是仍将共享一个从外部获取的Environment。

    默认情况下,引导上下文的配置属性具有高优先级,不会被本地配置覆盖,索引所要增加的配置属性信息就不是在application.properties中而是在bootstrap.properties配置文件中。

    product端目录结构:

          

     bootstrap.properties中内容:

          

     注意红框中的内容是启动服务时报错处理的方式有些不能同时存在,有些就是不支持。

    文件中内容除了服务端口、服务名及日志级别,其他都是与config配置相关的内容。此处默认使用default配置,如果不是则需要指定启用的profile:spring.cloud.config.profile=dev/sit/uat等。

  3)改造user端同product端类似。

   启动config客户端服务失败,什么原因呢?因为cloud2020.*后版本config引导包不再包含bootstrap包,所以需要在pom.xml中添加这个包:

        

   启动成功后,postman中输入http://localhost:2200/products/3/comments并访问,成功:

        

 

 

 

    

 

  

  

标签:初体验,服务,配置文件,Spring,配置,config,Config,properties
From: https://www.cnblogs.com/ilovebath/p/16964284.html

相关文章

  • 初探spring事件applicationEvent
    前言不知道各位小伙伴对事件(event)这个比较抽象的名词如何理解,从我实际开发和使用经验来说,事件通常指的是某一特定条件下触发的一组操作。做过生态开发(ISV)的小伙伴一定对......
  • spring boot_04
    1.springboot整合第三方1.1整合mybatis-plus导入mybatis-plus<dependency><groupId>com.baomidou</groupId><artifactId>mybati......
  • SpringBoot整合定时任务框架xxl-job
    1.github上下载xxl-job工程https://github.com/xuxueli/xxl-job2.导入idea3. 启动调度中心从github上才下下来的工程,主要分为三个部分,一个是后台管理系统模块,一个......
  • Springboot处理跨域请求
    Springboot中如何处理跨域请求一.什么是跨域?我们知道Url的一般格式:协议+域名(子域名+主域名)+端口号+资源地址比如:https://www.itquanmingxing.c......
  • SpringMVC —— RESTful案例
    案例:基于RESTful页面数据交互         ......
  • Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开
    ⚡平台简介⚡AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用。本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架。适合个人......
  • spring boot中Excel文件下载踩坑大全
    项目场景:Springboot文件下载调用接口下载springboot工程的resources目录下的excel模板文件,非常常见的一个文件下载功能,但是却容易遇到很多坑,下面总结记录下。问题一:下载的......
  • SpringBoot整合elasticsearch-rest-client实战
    前言很多人在Springboot项目中都已经习惯采用Spring家族封装的spring-data-elasticsearch来操作elasticsearch,而官方更推荐采用rest-client。今天给大家介绍下在springbo......
  • 给你的SpringBoot工程打的jar包瘦瘦身
    Springboot默认方式打包由于打的是全量依赖包(也称为fat包),不但打包慢,体积大,传输也慢,今天教大家给springboot瘦瘦身。背景现在微服务架构越来越流行,一个项目10多个基于sprin......
  • Configuration of your jobs with .gitlab-ci.yml
    Thisdocumentdescribestheusageof.gitlab-ci.yml,thefilethatisusedbyGitLabRunnertomanageyourproject'sjobs.Fromversion7.12,GitLabCIusesaYA......