Springcloud Config配置中心使用与相关介绍

 更新时间:2022年09月14日 16:46:32   作者:扎哇太枣糕  
springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用

Springcloud Config

什么是springcloud Config

  简单来说,Spring Cloud Config就是我们通常意义上的配置中心,也就是微服务项目中,每一个微服务都需要配置相应的配置,如果不同服务的配置文件有相同的配置,如果这些相同配置需要修改的话就要全都修改一遍。如果使用springcloud Config的话就可以把原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。

  Config分为服务端和客户端,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容

config服务端的配置使用

  第一步: 外部config需要结合git使用,于是需要在github或者gitee创建一个仓库,仓库里全都是各种配置文件,git远程仓库的创建这里就不多加赘述,创建完成之后需要获取到仓库的链接

  第二步: 引入相关依赖

<!--Config服务端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

  第三步: 配置文件配置远程仓库地址

server:
  port: 3344

spring:
  application:
    name: cloud-config-center #注册进Eureka服务器的微服务名
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/mereign/springcloud-config.git    #GitHub或者Gitee上面的git仓库名字
          search-paths: #搜索目录
            - springcloud-config
      label: master #读取分支
      #启动成功后访问的路径 http://ip:3344/{label}/{application}-{profile}.yml 能访问的配置文件 就表示成功了

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

  启动配置中心微服务模块,但是有些小伙伴会遇到这个异常Authentication is required but no CredentialsProvider has been registered,原因是你的远程仓库创建的私有的未开源,解决方案有两种,一来就是把仓库修改为开源仓库,还有就是使用下面的方法配置你github或者Gitee的用户名和密码

spring:
  application:
    name: cloud-config-center #注册进Eureka服务器的微服务名
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/mereign/springcloud-config.git    #GitHub或者Gitee上面的git仓库名字
          username: 自己的github或者Gitee用户名
          password: 自己的github或者Gitee密码

  第四步: 主程序类使用@EnableConfigServer注解标注Config服务端

配置好了之后启动微服务,可以使用url链接直接读取文件里的内容

config客户端的相关问题

config客户端的配置使用

  第一步: 引入相关依赖,这里客户端的依赖与服务端有所不同

<!--Config服务端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

  第二步: 配置文件,这里的客户端的配置文件与之前的有所不同,命名为bootstrap.yml,主要区别为applicaiton.yml是用户级的资源配置项,而bootstrap.yml是系统级的,优先级更加高

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:3344  #配置中心的地址
      label: master  #分支名称
      name: config  #配置文件名称
      profile: dev  #读取后缀名称   上述三个综合http://localhost:3344/master/config-dev.yml

#服务注册到eureka地址
eureka:
  client:
    service-url:
      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://localhost:7001/eureka #单机版

  经过上述配置,等服务启动开的时候,会3355服务端会到3344服务端获取config-dev的配置内容,3344服务端再来连接配置的GitHub或者Gitee仓库从而获取config-dev的配置内容

  第三步: 主程序类只需要标注eureka客户端即可,无需标注config客户端

  第四步: 服务端的url链接形式获取内容,而客户端需要使用REST接口的形式获取指定配置信息

@RestController
public class ConfigController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}

启动主程序类(要先启动注册中心eureka再启动config服务端,最后才能启动config客户端),然后访问controller中的接口即可获得相应的配置信息

动态刷新问题

  当远程仓库的配置修改之后,服务端通过url链接的形式获取内容是更新之后的,但是客户端使用REST接口的形式获取到的配置信息则是更新之前的,只有重启config服务端微服务才能通过客户端接口访问到更新之后的配置信息。

  为了解决上述的问题,可以使用动态刷新配置服务端微服务,避免每次配置更新都需要重启微服务才能获取最新配置的痛点

  第一步: 引入actuator监控技术依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

  第二步: bootstrap.yml文件中暴露服务端点,可以让这个服务处于可被监控状态

# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

  第三步: 在controller类上加@RefreshScope注解

  第四步: 发送post请求,手动刷新3355服务端的监控,这样才能刷新config服务端获取的配置信息

curl -X POST "http://localhost:3355/actuator/refresh

  第五步: 到此为止就config服务端就可以访问到远程仓库中最新的配置信息了

config客户端的遗留问题

  config客户端动态刷新解决了微服务每次都要重启才能获取最新配置信息的问题,但是,如果config客户端有很多呢?每次远程仓库配置修改都需要使用post请求手动刷新所有的服务吗?是不是也很麻烦,那么是否可以使用广播的形式,一次通知处处生效,大范围的自动刷新,定制化的指定服务刷新?那就用到了下一篇博客学习的消息总线——springcloud Bus

到此这篇关于Springcloud Config配置中心使用与相关介绍的文章就介绍到这了,更多相关Springcloud Config配置中心内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java报错之springboot3+vue2项目web服务层报错总结

    java报错之springboot3+vue2项目web服务层报错总结

    java入门学习,随手记录一下开发过程中产生的报错,有些错误是网上搜索再加上自己尝试,随手引用了一些其他人的记录,也是留给自己看的,或是希望能对其他初学者有帮助

    2023-06-06
  • 关于BeanUtils.copyProperties(source, target)的使用

    关于BeanUtils.copyProperties(source, target)的使用

    这篇文章主要介绍了关于BeanUtils.copyProperties(source, target)的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java SpringBoot项目如何优雅的实现操作日志记录

    Java SpringBoot项目如何优雅的实现操作日志记录

    这篇文章主要介绍了Java SpringBoot项目如何优雅的实现操作日志记录,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Mabitis中的#与$符号区别及用法介绍

    Mabitis中的#与$符号区别及用法介绍

    这篇文章主要介绍了Mabitis中的#与$符号区别,需要的朋友可以参考下
    2017-02-02
  • 分析JVM源码之Thread.interrupt系统级别线程打断

    分析JVM源码之Thread.interrupt系统级别线程打断

    在java编程中,我们经常会调用Thread.sleep()方法使得线程停止运行一段时间,而Thread类中也提供了interrupt方法供我们去主动打断一个线程。那么线程挂起和打断的本质究竟是什么,本文就此问题作一个探究
    2021-06-06
  • MAC下如何设置JDK环境变量

    MAC下如何设置JDK环境变量

    这篇文章主要介绍了MAC下如何设置JDK环境变量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 简单谈谈java中final,finally,finalize的区别

    简单谈谈java中final,finally,finalize的区别

    Java中final、finally、finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助。
    2016-05-05
  • Netty的Handler链调用机制及如何组织详解

    Netty的Handler链调用机制及如何组织详解

    这篇文章主要为大家介绍了Netty的Handler链调用机制及如何组织示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Java实现小程序简单五子棋

    Java实现小程序简单五子棋

    这篇文章主要介绍了利用Java实现小程序简单五子棋,本程序适用于java初学者巩固类与对象、事件响应、awt包中各种工具的相关概念以及对逻辑能力的锻炼,下面来看具体实现吧
    2021-12-12
  • Java如何获取相对路径文件

    Java如何获取相对路径文件

    这篇文章主要介绍了Java如何获取相对路径文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论