微服务SpringConfig配置中心详解

 更新时间:2025年04月19日 10:12:35   作者:早睡早起爱学习i  
这篇文章主要介绍了微服务SpringConfig配置中心,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

一、SpringConfig概念介绍

在实际操作中会出现多个微服务操作同一个数据库的情况,那么对于每个微服务都需要重复配置数据库信息,而且当数据库信息改动时也难以维护。因此一套集中的、动态的配置管理设施是必不可少的。

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。SpringCloud Config 具体分为客户端和服务端两部分。

具体作用:

  • 集中管理配置文件;
  • 不同运行环境不同的配置,动态化地进行配置更新,分环境部署(dev/test/prod/release)
  • 运行期间动态调整配置,不需要在每个服务部署的机器上编写配置文件,配置变动各个微服务能够自动拉取信息

二、配置中心服务器端搭建

配置中心服务端

1、SpringCloud Server使用Git 作为远程的配置文件仓库存储地址,我们需要先在远程建立好仓库

2、修改pom.xml、application.yml

        <!-- SpringConfig Server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
server:
  port: 3344
spring:
  application:
    name: cloud-config-server
  cloud:
    config:
      server:
        git:         #配置远程仓库的地址
          uri: https://gitee.com/loserii/my_-spring-cloud_config.git
          password: xjxhhxjava2048
          username: loserii
          search-paths: xxxxx     #git仓库下相对搜索地址
      label: master  #配置远程分支名
eureka:
  instance:
    instance-id: configServer
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

配置完成后启动服务,本地通过HTTP请求访问远程仓库上的配置文件时遵循以下格式的请求资源:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • {label} 作为远程仓库的分支;
  • {application}-{profile} 作为远程仓库上的配置文件名,比如config-test.yml

3、此外还可以配置多个存储库,配置相应的匹配规则来读取文件

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
            simple: https://github.com/simple/config-repo
            special:
              pattern: special*/dev*,*special*/dev*
              uri: https://github.com/special/config-repo
            local:
              pattern: local*
              uri: file:/home/configsvc/config-repo

pattern表示模式匹配,是带有通配符{application}/{profile}名称的逗号分隔列表。如果pattern不匹配任何模式,那么它就会使用spring.cloud.config.server.git.uri下的默认uri。

三、配置中心客户端搭建

3.1 配置同步机制介绍

客户端通过SpringCloud Config Server来获取到远程的Config环境配置,但是如果想要自己定义一些额外的配置,就需要另外创建一个配置文件。

客户端项目中包含两种配置文件:application.yml(用户级的资源配置项)、bootstrap.yml(系统级的资源配置项,优先级更高)

SpringCloud 会创建一个 Bootstrap Context上下文,该上下文作为 Application Context的父上下文。初始化的时候,Bootstrap Context负责从外部源加载配置属性并且解析配置。这两个上下文共享一个从外部获取的Environment

什么是Environment?

Environment用于存储服务器的配置数据,管理此行为的是EnvironmentRepository。Environment是Spring Environment(包括PropertySources作为主要功能)的域的浅层副本。

Environment资源由三个变量参数化:

  • {application}映射到客户端的spring.application.name
  • {profile}映射到客户端上的 spring.profiles.active
  • {label}标记版本这一组件;

3.2 详细配置

客户端从配置服务中心获取配置。

  • 修改 pom.xml、bootstrap.yml
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
spring:
  application:
    name: ConfigCenterClient
  cloud:
    config:
      fail-fast: false     #客户端连接失败时开启重试,需要结合spring-retry、spring-aop
      label: master       #获取配置文件的分支名
      name: config        #获取的文件名
      profile: test       #文件后缀
      uri: http://localhost:3344  #配置中心服务端地址

eureka:
  instance:
    instance-id: config-client
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
server:
  port: 3355

注意与eureka、cloud相关的配置需要放在bootstrap.yml文件中,程序启动时会先读取bootstrap.yml然后再读取application.yml

  • 测试配置读取
@RestController
@RequestMapping("/test")
public class TestController {
    @Value("${config.info}")
    private String info;

    @GetMapping("/testInfo")
    public String test(){
        return info;
    }
}

3.3 分布式下的问题

测试时发现当在远程仓库修改配置文件数据后,本地的SpringCloud Config Server能够在不重启的情况下接收到新配置,但是本机的SpringCloud Config Client就不能直接获取,必须进行重启。这在微服务很多时是不方便处理的。

解决方法: 客户端向外部暴露监控的端点,结合@RefreshScope注解来解决

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring-Data-JPA整合MySQL和配置的方法

    Spring-Data-JPA整合MySQL和配置的方法

    这篇文章主要介绍了Spring Data JPA整合MySQL和配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 深入理解java异常处理机制及应用

    深入理解java异常处理机制及应用

    本篇文章主要介绍了java异常处理机制及应用,异常处理机制是Java语言的一大特色。从异常处理的机制、异常处理的方法、异常处理的原则等方面介绍Java语言的异常处理技术,有兴趣的可以了解一下。
    2016-12-12
  • 教新手使用java如何对一个大的文本文件内容进行去重

    教新手使用java如何对一个大的文本文件内容进行去重

    用HashSet对内容去重这个过程jvm会内存溢出,只能首先将这个大文件中的内容读取出来,对每行String的hashCode取模取正整数,可用取模结果作为文件名,将相同模数的行写入同一个文件,再单独对每个小文件进行去重,最后再合并
    2021-06-06
  • Java AQS中CyclicBarrier回环栅栏的使用

    Java AQS中CyclicBarrier回环栅栏的使用

    这篇文章主要介绍了Java中的 CyclicBarrier详解,CyclicBarrier没有显示继承哪个父类或者实现哪个父接口, 所有AQS和重入锁不是通过继承实现的,而是通过组合实现的,下文相关内容需要的小伙伴可以参考一下
    2023-02-02
  • SpringBoot整合WebSocket的客户端和服务端的实现代码

    SpringBoot整合WebSocket的客户端和服务端的实现代码

    这篇文章主要介绍了SpringBoot整合WebSocket的客户端和服务端的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • SpringBoot中Session的使用及说明

    SpringBoot中Session的使用及说明

    这篇文章主要介绍了SpringBoot中Session的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java SpringBoot 中的操作事务

    Java SpringBoot 中的操作事务

    这篇文章主要介绍了Java SpringBoot 中的操作事务,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • SpringCloud Gateway 利用 Mysql 实现动态路由的方法

    SpringCloud Gateway 利用 Mysql 实现动态路由的方法

    这篇文章主要介绍了SpringCloud Gateway 利用 Mysql 实现动态路由的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java list foreach修改元素方式

    Java list foreach修改元素方式

    这篇文章主要介绍了Java list foreach修改元素方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java基础知识精通注释与数据类型及常量与变量

    Java基础知识精通注释与数据类型及常量与变量

    本文给大家介绍了Java的注释与数据类型和常量变量,这些都是最基础的知识,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论