SpringCloud之Config分布式远程配置中心

一、什么是分布式配置中心?用来干嘛的?

Spring Cloud Config 是一种用来动态获取Git、SVN、本地配置文件的一种工具

在spring cloud项目中,都会配置一个配置中心去管理各个服务的配置文件,而往往配置文件不会放到本地配置中心,一般都会放到git上,也就是配置文件与项目分离,放在git或者svn上统一管理。既可以多个项目的配置文件共用一个仓库,也可以每个项目分别一个仓库!!

接下来我们看看如何来搭建config服务端和客户端:

1.先创建一个名为springcloud-config-server-6001的子模块,作为config服务端

导入依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

它的配置如下:

server:
  port: 6001

spring:
  application:
    name: springcloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xingrenjie/springcloud-config.git
          search-paths: /**

说明如下:

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

然后在启动类上加上注解@EnableConfigServer即可。

这样一来,服务端就配置好了。

2.另起一个模块作为客户端。我这里拿eureka来测试,并且项目里eureka的核心配置文件是空的:

导入依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

在resource目录下新建bootstrap.yml文件,内容如下:

spring:
  cloud:
    config:
      uri: http://localhost:6001
      label: master
      name: config-eureka-server
      profile: eureka7001

说明如下:

spring.cloud.config.uri:连接的config服务端地址(这里我的服务端地址为localhost:6001

spring.cloud.config.name: 获取配置文件的名称(我gitee仓库里的配置文件名为config-eureka-server)。
spring.cloud.config.profile: 获取配置的策略(我的配置文件里有三种配置,这里设置取哪种)。
spring.cloud.config.label:获取仓库分支,默认是master。如果是是本地获取的话,则无用。
spring.cloud.config.discovery.enabled: 开启配置信息发现。
spring.cloud.config.discovery.serviceId: 指定配置中心的service-id,便于扩展为高可用配置集群。
注:上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为bootstrap.properties的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。需要注意的是eureka.client.serviceUrl.defaultZone要配置在bootstrap.properties,不然客户端是无法获取配置中心参数的,会启动失败!
 

最后来看看我的gitee仓库和配置文件内容:

config-eureka-server.yml配置内容如下:

spring:
  profiles:
    active: eureka7001
    
---
server:
  port: 7001
  
spring:
  profiles: eureka7001
  
eureka:
  instance:
    hostname: eureka7001.com
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
      
---
server:
  port: 7002
  
spring:
  profiles: eureka7002
  
eureka:
  instance:
    hostname: eureka7002.com
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7003.com:7003/eureka
      
---
server:
  port: 7003
  
spring:
  profiles: eureka7003
  
eureka:
  instance:
    hostname: eureka7003.com
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

我将eureka集群的三个配置写在一个配置文件了,由spring.profiles来区分。这样一来,三个客户端连接同一个config服务端,只需指定spring.cloud.config.profile:eureka7001,eureka7002,eureka7003即可拿到各自的配置!!

下面我启动看看效果:

简单的config分布式配置中心就完成了,有一个问题,我的配置文件都是杂乱的放在一个仓库里的,如果这个仓库需要存放多个项目的配置文件呢。那我们是不是应该对每个项目的配置文件分类存放,分别放在各自的目录下?

多个项目公用一个Git仓库,用不同的目录区分项目:

服务端:

server:
  port: 6001

spring:
  application:
    name: springcloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xingrenjie/springcloud-config.git
          search-paths: ‘{application}’

这种模式下不同的项目会对应到https://gitee.com/xingrenjie/springcloud-config.git仓库下的不同目录,如果项目中spring.application.name=user,那么它的配置仓库会定位到https://gitee.com/xingrenjie/springcloud-config.git仓库下的/user目录。配置文件按application-{profile}.properties的格式存储,{profile}代表环境名。

多个项目使用多个不同Git仓库:

服务端:

spring.cloud.config.server.git.uri=https://gitee.com/xingrenjie/{application}.git

这种模式下不同的项目会对应的不同的Git仓库,如果项目中spring.application.name=user,那么它的配置仓库会定位到https://gitee.com/xingrenjie/user.git仓库下的配置。配置文件按application-{profile}.properties的格式存储,{profile}代表环境名。

猜你喜欢

转载自blog.csdn.net/weixin_46792649/article/details/106796022