zoukankan      html  css  js  c++  java
  • Spring Cloud Config 分布式配置中心

    转自:https://zhuanlan.zhihu.com/p/65654453

    在Spring Boot服务中,我们可以通过设置多个profile来配置不同的application-{profile}.yml,然后在启动服务时指定要加载的配置文件spring.profiles.active={profile}

    但是在Spring Cloud微服务架构中,这种配置方式不再适用。Spring Cloud对于配置有着更高、更灵活的要求,需要做到统一管理,实时更新,这时我们使用分布式配置中心组件来管理配置,也就是Spring Cloud Config。

    0. 开发环境

    • IDE:IntelliJ IDEA 2017.1 x64
    • JDK:1.8.0_91
    • Spring Boot:2.0.9.RELEASE
    • Spring Cloud:Finchley.RELEASE

    1. Spring Cloud Config简介

    Spring Cloud Config是一个解决分布式系统的配置管理方案,为分布式系统外部化配置提供了支持,包含Config Server和Config Client两部分,Server提供配置文件存储,对外提供接口以获取配置文件的内容,Client通过接口获取数据,并初始化自己。

    2. 创建Config Server

    2.1 新建Git仓库

    新建Git仓库,用于存放配置文件。

    这里我们直接在SpringCloudDemo仓库中新建spring-cloud-config-repo文件夹,然后新建三个配置文件

    spring-cloud-config-client-pro.yml

    version: 1.0
    profile: pro

    spring-cloud-config-client-dev.yml

    version: 1.0
    profile: dev

    spring-cloud-config-client-test.yml

    version: 1.0
    profile: test

    2.2 新建Config Server

    新建Config Server服务spring-cloud-config-server

    2.3 引入依赖

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

    2.4 新建启动类

    @EnableConfigServer 注解表示开启配置服务器

    package cn.wbnull.springcloudconfig;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer
    public class SpringCloudConfigServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudConfigServerApplication.class, args);
        }
    }

    2.5 新建application.yml

    server:
      port: 8092
      servlet:
        context-path: /springcloudconfig
    
    spring:
      application:
        name: spring-cloud-config-server
      cloud:
        config:
          server:
            git:
              uri: https://github.com/dkbnull/SpringCloudDemo
              search-paths: spring-cloud-config-repo
              username: ""
              password: ""
          label: master
    • spring.cloud.config.server.git.uri 配置Git仓库的地址
    • spring.cloud.config.server.git.searchPaths 配置文件的路径
    • spring.cloud.config.label 配置仓库的分支
    • spring.cloud.config.server.git.username 访问Git仓库的用户名,公开仓库可不填写
    • spring.cloud.config.server.git.password 访问Git仓库的密码,公开仓库可不填写

    2.6 测试

    启动spring-cloud-config-server服务,浏览器访问  ,返回如下

    {
        "name": "spring-cloud-config-client",
        "profiles": [
            "pro"
        ],
        "label": null,
        "version": "8bddb99fecf031d284f1d7503b70c212f665e86f",
        "state": null,
        "propertySources": [
            {
                "name": "https://github.com/dkbnull/SpringCloudDemo/spring-cloud-config-repo/spring-cloud-config-client-pro.yml",
                "source": {
                    "version": 1.0,
                    "profile": "pro"
                }
            }
        ]
    }

    浏览器访问  ,返回如下

    {
        "name": "spring-cloud-config-client",
        "profiles": [
            "dev"
        ],
        "label": null,
        "version": "2fa4983d777889ef29e453a7b4818645269124b1",
        "state": null,
        "propertySources": [
            {
                "name": "https://github.com/dkbnull/SpringCloudDemo/spring-cloud-config-repo/spring-cloud-config-client-dev.yml",
                "source": {
                    "version": 1.0,
                    "profile": "dev"
                }
            }
        ]
    }

    从Git仓库获取配置成功。

    2.7 配置文件映射关系

    Http请求地址与配置文件映射关系如下:

    映射{application}-{profile}.yml或{application}-{profile}.properties配置文件
    
    /{application}/{profile}[/{label}]
    /{application}-{profile}.yml
    /{application}-{profile}.properties
    /{label}/{application}-{profile}.yml
    /{label}/{application}-{profile}.properties
    • {application}通常使用微服务的名称,对应于Git仓库中配置文件文件名的前缀
    • {profile}对应于{application}-{profile}的{profile}
    • {label}对应于Git仓库的分支名,默认为master

    3. 创建Config Client

    3.1 新建Config Client

    新建Config Client服务spring-cloud-config-client

    3.2 引入依赖

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

    3.3 新建启动类

    package cn.wbnull.springcloudconfig;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringCloudConfigClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudConfigClientApplication.class, args);
        }
    }

    3.4 新建application.yml

    server:
      port: 8093
      servlet:
        context-path: /springcloudconfig

    3.5 新建bootstrap.yml

    Spring Boot服务启动时会加载application.yml/application.properties配置文件,Spring Cloud中有”引导上下文“的概念,引导上下文会加载bootstrap.yml/bootstrap.properties配置文件,即bootstrap.yml/bootstrap.properties会在Spring Boot服务启动之前加载,具有更高的优先级。默认情况下bootstrap.yml/bootstrap.properties中的属性不能被覆盖。

    spring:
      application:
        name: spring-cloud-config-client
      cloud:
        config:
          uri: http://127.0.0.1:8092/springcloudconfig
          profile: pro
          label: master
    • spring.application.name 配置Config Server获取的配置文件的{application}
    • spring.cloud.config.uri 配置Config Server的地址
    • spring.cloud.config.profile 配置Config Server获取的配置文件的{profile}
    • spring.cloud.config.label 配置Config Server获取的配置文件的{label}

    3.6 新建控制器类

    package cn.wbnull.springcloudconfig.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Scope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @Scope("prototype")
    public class GatewayController {
    
        @Value("${version}")
        private String version;
    
        @Value("${profile}")
        private String profile;
    
        @GetMapping(value = "/gateway")
        public String gateway() throws Exception {
            return "version:" + version + ",profile:" + profile;
        }
    }

    3.7 测试

    依次启动spring-cloud-config-server、spring-cloud-config-client,浏览器访问  ,返回如下

    version:1.0,profile:pro

    spring-cloud-config-client成功通过spring-cloud-config-server从Git仓库中获取到了指定配置文件的配置信息。

  • 相关阅读:
    条件极值(1):隐函数极值问题
    从隐函数存在定理到隐函数定理
    吐槽教科书:不先行解释表达偏导数的符号
    8237dma的四种传送方式简介
    多线程中wait和notify的理解与使用
    ★三个和尚与机构臃肿的故事
    ★三个和尚与机构臃肿的故事
    常用的组播保留地址列表
    常用的组播保留地址列表
    谈谈IT界8大恐怖预言!
  • 原文地址:https://www.cnblogs.com/sharpest/p/13712735.html
Copyright © 2011-2022 走看看