Spring Cloud Config:外部集中化配置管理

2021-03-03 07:26

阅读:565

标签:points   reporting   second   商业   tst   更改   lan   dev   localhost   

Spring Cloud Config:外部集中化配置管理

摘要

Spring Cloud Config 可以为微服务架构中的应用提供集中化的外部配置支持,它分为服务端和客户端两个部分 。

Spring Cloud Config 简介

Spring Cloud Config 分为服务端和客户端两个部分。服务端被称为分布式配置中心,它是个独立的应用,可以从配置仓库获取配置信息并提供给客户端使用。客户端可以通过配置中心来获取配置信息,在启动时加载配置。Spring Cloud Config 的配置中心默认采用Git来存储配置信息,所以天然就支持配置信息的版本管理,并且可以使用Git客户端来方便地管理和访问配置信息。

 

搭建Config配置中心

在Git仓库中准备配置信息

由于Spring Cloud Config 需要一个存储配置信息的Git仓库,这里我们先在Git仓库中添加好配置文件再演示其功能

 

master分支下的配置信息

  • config-dev.yml:

config:
info: "config info for dev(master)"
复制代码
  • config-test.yml:

config:
info: "config info for test(master)"
复制代码
  • config-prod.yml:

config:
info: "config info for prod(master)"
复制代码

dev分支下的配置信息

  • config-dev.yml:

config:
info: "config info for dev(dev)"
复制代码
  • config-test.yml:

config:
info: "config info for test(dev)"
复制代码
  • config-prod.yml:

config:
info: "config info for prod(dev)"
复制代码

创建config-server模块

这里我们创建一个config-server模块来演示Spring Cloud Config 作为配置中心的功能。

 

pom.xml文件

xml version="1.0" encoding="UTF-8"?>
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    modelVersion>4.0.0modelVersion>
    parent>
        groupId>org.springframework.bootgroupId>
        artifactId>spring-boot-starter-parentartifactId>
        version>2.2.2.RELEASEversion>
        relativePath/> 
    parent>
    groupId>com.renogroupId>
    artifactId>springcloud.config.serverartifactId>
    version>1.0version>
    name>springcloud.config.servername>
    description>Demo project for Spring Bootdescription>
?
?
    properties>
        project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        java.version>1.8java.version>
        spring-cloud.version>Hoxton.RELEASEspring-cloud.version>
    properties>
?
?
    dependencies>
        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starterartifactId>
        dependency>
?
        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-testartifactId>
            scope>testscope>
        dependency>
?
        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-webartifactId>
        dependency>
?
        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-netflix-eureka-serverartifactId>
            version>2.2.0.RELEASEversion>
        dependency>
        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-config-serverartifactId>
        dependency>
?
        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-securityartifactId>
        dependency>
?
        dependency>
            groupId>cn.hutoolgroupId>
            artifactId>hutool-allartifactId>
            version>4.6.3version>
        dependency>
?
    dependencies>
?
?
    dependencyManagement>
        dependencies>
            dependency>
                groupId>org.springframework.cloudgroupId>
                artifactId>spring-cloud-dependenciesartifactId>
                version>${spring-cloud.version}version>
                type>pomtype>
                scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>
?
?
    repositories>
        repository>
            id>spring-milestonesid>
            name>Spring Milestonesname>
            url>https://repo.spring.io/milestoneurl>
            snapshots>
                enabled>falseenabled>
            snapshots>
        repository>
    repositories>
?
?
    build>
        plugins>
            plugin>
                groupId>org.springframework.bootgroupId>
                artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
?
project>
?

 


yml文件

server:
  port: 38901
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git: #配置存储配置信息的Git仓库
          uri: https://gitee.com/reno/springcloud-config.git
          username: 20@126.com
          password: 23456
          clone-on-start: true #开启启动时直接从git获取配置
#          search-paths: ‘{application}‘
  security: #配置用户名和密码
    user:
      name: test
      password: 123456
eureka:
  instance:
    hostname: 192.16.10.208
    #hostname: localhost
    #设置是否将自己作为客户端注册到注册中心(缺省true)
    #这里为不需要,查看@EnableEurekaServer注解的源码,会发现它间接用到了@EnableDiscoveryClient
    instance-id: configServerService-${spring.cloud.client.ipaddress}-${server.port}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://192.16.10.208:38761/eureka/
    registry-fetch-interval-seconds: 5
    instance-info-replication-interval-seconds: 10

 



 

在启动类上添加@EnableConfigServer注解来启用配置中心功能

通过config-server获取配置信息

这里我们通过config-server来演示下如何获取配置信息。

获取配置文件信息的访问格式

# 获取配置信息
/{label}/{application}-{profile}
# 获取配置文件信息
/{label}/{application}-{profile}.yml
复制代码

占位符相关解释

  • application:代表应用名称,默认为配置文件中的spring.application.name,如果配置了spring.cloud.config.name,则为该名称;

  • label:代表分支名称,对应配置文件中的spring.cloud.config.label;

  • profile:代表环境名称,对应配置文件中的spring.cloud.config.profile。

获取配置信息演示

  • 启动eureka-server、config-server服务;

  • 访问http://localhost:38901/master/config-dev来获取master分支上dev环境的配置信息;

  • 访问http://localhost:38901/master/config-dev.yml来获取master分支上dev环境的配置文件信息,对比上面信息,可以看出配置信息和配置文件信息并不是同一个概念;

 

创建config-client模块

我们创建一个config-client模块来从config-server获取配置。

 

pom文件

xml version="1.0" encoding="UTF-8"?>
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    modelVersion>4.0.0modelVersion>
    parent>
        groupId>org.springframework.bootgroupId>
        artifactId>spring-boot-starter-parentartifactId>
        version>2.2.2.RELEASEversion>
        relativePath/> 
    parent>
    groupId>com.renogroupId>
    artifactId>springcloud.config.clientartifactId>
    version>1.0version>
    name>springcloud.config.clientname>
    description>Demo project for Spring Bootdescription>

    properties>
        project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        java.version>1.8java.version>
        spring-cloud.version>Hoxton.RELEASEspring-cloud.version>
    properties>


    dependencies>
        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starterartifactId>
        dependency>

        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-testartifactId>
            scope>testscope>
        dependency>

        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-webartifactId>
        dependency>

        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-netflix-eureka-serverartifactId>
            version>2.2.0.RELEASEversion>
        dependency>
        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-starter-configartifactId>
        dependency>
        dependency>
            groupId>org.springframework.bootgroupId>
            artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        dependency>
            groupId>cn.hutoolgroupId>
            artifactId>hutool-allartifactId>
            version>4.6.3version>
        dependency>

    dependencies>


    dependencyManagement>
        dependencies>
            dependency>
                groupId>org.springframework.cloudgroupId>
                artifactId>spring-cloud-dependenciesartifactId>
                version>${spring-cloud.version}version>
                type>pomtype>
                scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>


    repositories>
        repository>
            id>spring-milestonesid>
            name>Spring Milestonesname>
            url>https://repo.spring.io/milestoneurl>
            snapshots>
                enabled>falseenabled>
            snapshots>
        repository>
    repositories>


    build>
        plugins>
            plugin>
                groupId>org.springframework.bootgroupId>
                artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

 

 

yml文件

server:
  port: 39001
spring:
  application:
    name: config-client
  cloud:
    config: #Config客户端配置
      profile: dev #启用配置后缀名称
      label: dev #分支名称
      uri: http://localhost:38901 #配置中心地址
      name: config #配置文件名称
      username: test
      password: 123456
eureka:
  instance:
    hostname: 192.16.10.208
    #hostname: localhost
    #设置是否将自己作为客户端注册到注册中心(缺省true)
    #这里为不需要,查看@EnableEurekaServer注解的源码,会发现它间接用到了@EnableDiscoveryClient
    instance-id: configServerService-${spring.cloud.client.ipaddress}-${server.port}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://192.16.10.208:38761/eureka/
    registry-fetch-interval-seconds: 5
    instance-info-replication-interval-seconds: 10
management:
  endpoints:
    web:
      exposure:
        include: ‘refresh‘
 

 

 

演示从配置中心获取配置

  • 启动config-client服务;

  • 访问http://localhost:39001/configInfo,可以获取到dev分支下dev环境的配置;

config info for dev(dev)

 

获取子目录下的配置

我们不仅可以把每个项目的配置放在不同的Git仓库存储,也可以在一个Git仓库中存储多个项目的配置,此时就会用到在子目录中搜索配置信息的配置。

  • 首先我们需要在config-server中添加相关配置,用于搜索子目录中的配置,这里我们用到了application占位符,表示对于不同的应用,我们从对应应用名称的子目录中搜索配置,比如config子目录中的配置对应config应用;

spring:
  cloud:
    config:
      server:
        git: 
          search-paths: ‘{application}‘
  • 访问http://localhost:39001/configInfo进行测试,可以发现获取的是config子目录下的配置信息。

config info for config dir dev(dev)

刷新配置

当Git仓库中的配置信息更改后,我们可以通过SpringBoot Actuator的refresh端点来刷新客户端配置信息,以下更改都需要在config-client中进行。

  • 在pom.xml中添加Actuator的依赖:

org.springframework.boot
   spring-boot-starter-actuator

复制代码
  • 在bootstrap.yml中开启refresh端点:

management:
  endpoints:
    web:
      exposure:
        include: ‘refresh‘

 

 

 

 本文参考自MacroZheng链接 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

Spring Cloud Config:外部集中化配置管理

标签:points   reporting   second   商业   tst   更改   lan   dev   localhost   

原文地址:https://www.cnblogs.com/reno2020/p/14398997.html


评论


亲,登录后才可以留言!