zoukankan      html  css  js  c++  java
  • 0701-spring cloud config-简介、Config Server开发、Config Client开发

    一、概述

    参看地址:

      https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_spring_cloud_config

      https://gitee.com/itmuch/spring-cloud-book

    1.1、为什么需要统一管理配置

      集中管理、不同环境不同配置、运行期间动态调整配置、自动刷新

      默认都是配置在配置文件中、数据库等中

    1.2、简介

      主要有两种分布式配置Zookeeper、Consul。

      其实还有许多,如百度的disconf、阿里的diamond、携程的apollo

      为分布式系统外部化配置提供了服务器端和客户端的支持。它包括Config Server和Config Client两部分。由于Config Server和Config Client都实现了对Spring Environment 和PropertySource抽象的映射,因此,Spring Cloud Config非常适合Spring应用程序,当然也可以与任何其他语言编写的应用程序配合使用。

      Config Server是一个可横向扩展、集中式的配置服务器。它用于集中管理应用程序各个环境下的配置。默认使用Git存储配置内容(也可以使用Subversion,本地文件系统或Vault存储配置。)因此可以方便的实现对配置的版本控制与内容审计等

      Config Client是Config Server的客户端,用于操作存储在Config Server中的配置属性。

    1.3、架构图

      在Config Server可以有dev、stage、prod等环境

       

    二、Config Server开发

    2.1、项目搭建

    如git地址:https://github.com/bjlhx15/spring-cloud.git

    增加pom

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

    启动类增加注解

    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigServerApplication.class, args);
        }
    }

    2.2、增加配置项目git

      如:https://github.com/bjlhx15/spring-cloud-config-test-repo.git

     2.3、在application.yml中增加

    server:
      port: 8080
    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/bjlhx15/spring-cloud-config-test-repo

    启动项目测试即可.

    2.4、访问地址

      HTTP服务具有以下形式的资源映射规则:

    /{application}/{profile}[/{label}]
    /{application}-{profile}.yml
    /{label}/{application}-{profile}.yml
    /{application}-{profile}.properties
    /{label}/{application}-{profile}.properties

      其实是按照格式随意拼接即可。如:http://localhost:8080/aa-profile.properties 或者 http://localhost:8080/aa-profile.yml

      其中label是git的分支版本。

    2.5、测试

      增加foobar-dev.yml测试。

      访问:http://localhost:8080/foobar-dev.yml,发现是配置的文件,。

      即访问优先级:先找到能匹配的文件【label/具体文件名】,如果不匹配即找到application配置文件。

      平时使用建议使用一个配置文件即可

    三、Config Client开发

    3.1、创建项目

    git地址:https://github.com/bjlhx15/spring-cloud.git

    增加pom【注意是spring-cloud-starter-config】

            <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>

    配置文件

    新增一个bootstrap.yml

    spring:
      cloud:
        config:
          uri: http://localhost:8080
          name: foobar
          profile: dev
          label: master   # 当configserver的后端存储是Git时,默认就是master  
    application: #和配置文件匹配最好
    name: foobar

    在application.yml

    server:
      port: 8040

    原因是:Spring云上下文

      Spring Cloud应用程序通过创建“bootstrap”上下文来运行,该上下文是主应用程序的父上下文。【bootstrap.yml 优先级高于application.yml】开箱即用,它负责从外部源加载配置属性,并且还解密本地外部配置文件中的属性。这两个上下文共享一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap属性以高优先级添加,因此默认情况下它们不能被本地配置覆盖。

      bootstrap程序上下文默认约定:使用bootstrap.yml【bootstrap.properties】覆盖application.yml(或.properties)

      但是可以使用spring.cloud.bootstrap.enabled=false禁用

      bootstrap.*里面的配置→链接Config Server,加载远程配置之后→在加载application.*配置

    2.2、增加启动类

    @SpringBootApplication
    public class ConfigClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigClientApplication.class, args);
        }
    }

    2.3、增加测试

    @RestController
    public class ConfigClientController {
        // 传统方式需要在配置文件加上配置 ,但是优先级低于使用bootstap加载的配置
        @Value("${profile}")
        private String profile;
    
        @GetMapping("/profile")
        public String getProfile() {
            return this.profile;
        }
    }

    注意点:

      1、pom的spring-cloud-starter-config不要引错;

      2、不要不适用bootstrap.yml。否则默认是8888端口

      3、如果本地属性也有远端属性,以bootstrap.yml先与本地application为主,故使用远端属性profile

      4、注意git上的配置文件如果是yml类型,注意属性“:”后有空格。。

  • 相关阅读:
    几个用于序列化的代码片段
    一个统计查询写的哥要哭了
    pb数据窗口数据输入的下拉选择效果
    PB代码块
    获取指定表的字段信息sql2005
    TSQL时间格式化显示
    Atitit 为什么互联网金融会得到高层的支持 面子工程战略 政绩战略 大事业战略 高层需要在意识形态创新全球,政绩工程 得到合法性。 银行有很多家,而且别的区域也有。。不独特。。但是支付
    Atitit 软件与互联网理论 attilax总结
    Atitit 软件与开发的未来趋势 attilax总结 1.1. Sdx软件重构世界 软件定义未来 1 1.2. 《软件和信息技术服务业发展规划(20162020年)》( 2 1.3. Iot物联
    Atitit it业界与软件界的定律 原则 准则 法则 效应
  • 原文地址:https://www.cnblogs.com/bjlhx/p/9074305.html
Copyright © 2011-2022 走看看