Spring Cloud_30_SpringCloud配置中心/概述

SpringCloud配置中心/概述

  • 之前学习过SpringCloud中Eureka、Ribbon、Feign、Hystrix、Zuul、Stream(RabbitMQ、Kafka)等,都是使用application.yml进行配置的
  • 在实际应用中,集群中会有多个服务,每个服务都可能部署多个实例,这个时候会出现多个配置,如何做到修改了配置而不需要重启服务?
  • 如果修改一些常规配置都要重启服务,这明显不合理,而且无形中增加了不必要的工作量。
  • 那么需要引进配置中心
    1. 对配置进行集中管理
    2. 修改配置无需重启服务,自动刷新配置

1、SpringCloud Config

  • 服务器

    1. 提供访问配置的服务接口
    2. 对属性进行加密和解密
  • 客户端

    1. 绑定配置服务器,使用远程的属性来初始化自己客户端的Spring容器(远程读配置)
    2. 对属性进行加密和解密
    3. 属性改变时,可以对它们进行重新加载
    4. 提供了与配置相关的几个管理端点
    5. 在初始化引导程序的上下文时,进行绑定配置服务器和属性解密等工作,当然,也可以实现其他工作

SpringCloud Config为分布式集群系统提供了配置服务器与配置客户端,通过对这两者的配置,可以实现对集群中的配置进行管理,在实际应用中,我们会将配置文件放置外部系统(Git、SVN等),SpringCloud Config服务器会到Git/SVN读取配置文件并且使用,Config服务器和客户端可以很容易通过增加依赖集成到系统中

2、应用程序结构

3、引导程序

  • 在主应用上下文初始化之前创建
  • 创建时会读取远程配置

每一个SpringCloud程序在初始化容器时,会先建立一个引导上下文

package com.atm.cloud;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用于获取Spring Context
 */
@RestController
public class SpringContextController {

    /**
     * 1.引导程序上下文的父上下文(父上下文先创建)会默认读取src/main/resouces中的bootstrap.yml
     * 2.如果application.yml与bootstrap.yml中属性相同,则读取的是application.yml中的属性
     * 3.配置客户端引导程序在创建上下文的时候,会读取远程配置,查看启动日志 :
     *  2018-03-22 14:31:18.873 INFO 2816 [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : 
     *  Fetching config from server at: http://localhost:8888
     *  会去8888端口抓取配置,也就是说引导程序在创建的时候会去远程抓取配置,使用抓取的配置来启动自己的上下文
     */

    // ApplicationContext为该程序的上下文
    // 父上下文默认会读取src/main/resouces中的bootstrap.yml
    @Autowired
    private ApplicationContext ctx;

    @GetMapping("/getSCtx")
    @ResponseBody
    public String getSpringContext() {
        System.out.println("-------");
        System.out.println(ctx);
        // 在我们的容器之上,还有一个父容器,父容器会加载bootstrap.yml的配置文件
        System.out.println(ctx.getParent());

        // 父上下文创建的时候,就会去读取bootstra.yml
        // 如果在application.yml中有同样的属性,则会被覆盖
        Environment env = ctx.getEnvironment();
        System.out.println(env.getProperty("test.user.name"));
        return "Success!";
    }
}

4、搭建SVN服务器

  • 为了方便往后测试,现在SVN服务器和SVN客户端,然后搭建SVN本地服务器,均是傻瓜式安装
  • SpringCloud默认是使用Git来管理的
  • 使用SVN来当作配置的管理中心,配置文件均存放在SVN中

你可能感兴趣的:(SpringCloud,SpringCloud)