Spring Cloud学习--配置中心(Config)

Spring Cloud学习--配置中心(Config)

一、 Spring Cloud Config简介

微服务要实现集中管理微服务配置、不同环境不同配置、运行期间也可动态调整、配置修改后可以自动更新的需求,Spring Cloud Config同时满足了以上要求。Spring Cloud Config 分为Config Server和Config Client两部分,是一个可以横向扩展,集中式的配置服务器, 默认使用Git存储配置内容。

Spring Cloud Config 原理图如图所示:

二、 编写 Config Server

1.先在github上新建一个仓库,添加配置文件。

2.新建一个spring boot 项目,pom.xml中添加如下依赖:

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.启动类上添加@EnableConfigServer注解,表示这个类是一个Config Server

@SpringBootApplication
@EnableConfigServer
public class SpringConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringConfigServerApplication.class, args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.配置application.yml文件

server:
 port: 8001
spring:
 cloud:
  config:
   server:
    git:
     uri: https://github.com/songxiansen521/spring-cloud-config-repo.git
     username: ****your git name****
     password: ****your git pw****
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.启动项目,访问http://localhost:8001/microservice-foo/dev,看到如下页面,Config Server 配置成功。

6.关于Config Server的端点。 
可以使用Config Server的端点获取配置文件的内容,映射规则如下:

/{application}/{profile}[/{label}]
  • 1

本例: http://localhost:8001/microservice-foo/dev

/{application}-{profile}.yml
/{application}-{profile}.properties
  • 1
  • 2

本例:http://localhost:8001/microservice-foo.properties

/{label}/{application}-{profile}.yml
/{label}/{application}-{profile}.properties
  • 1
  • 2

本例: http://localhost:8001/config-label-v1.0/microservice-foo-dev.properties

三 编写Config Client

1.新建spring boot 项目,添加如下依赖:

   <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.编写配置文件application.yml

server.port=8002
  • 1

3.编写配置文件bootstrap.yml。配置在bootstrap.xml中的属性有更高的优先级,默认情况下不会被本地覆盖。

spring:
 application:
  #对应config server中配置文件的{application}
  name: microservice-foo
 cloud:
  config:
    #访问config server的地址
    uri: http://localhost:8001
    #对应config server中配置文件的{profile}
    profile: dev
    #对应config server中配置文件的{label}
    label: master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4.添加Controller类,

package com.swc.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by chao on 2017-11-8.
 */
@RestController
public class ConfigClientController {

    @Value("${profile}")
    private String profile;

    @GetMapping("/getProfile")
    public String hello(){
        return this.profile;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.启动应用,访问http://localhost:8002/getProfile,得到如下页面,说明Client能成功通过Config Server获取Git仓库中对应环境的配置。

四、 使用/refresh端点手动刷新配置

很多时候,需要在运行期间动态调整配置,可以使用/refresh 实现微服务配置的刷新。 
在上面Config Client项目中,我已经添加了一个依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

在controller上添加@RefereshScope,该注解会在配置更改时得到特殊的处理。

package com.swc.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by chao on 2017-11-8.
 */
@RestController
@RefreshScope
public class ConfigClientController {

    @Value("${profile}")
    private String profile;

    @GetMapping("/getProfile")
    public String hello(){
        return this.profile;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.启动项目,http://localhost:8002/getProfile 访问修改Git仓库中配置文件内容,再次访问,发现结果没变化。 
这时,就需要手动刷新:以POST请求,访问http://localhost:8001/refresh 
第三次访问,结果如图所示,配置刷新

五、 Spring Config Server与Eurelka配合使用

将Config Server 和 Config Client都注册到Eureka Server上。 
修改 Config Client

spring:
 application:
  #对应config server中配置文件的{application}
  name: microservice-foo
 cloud:
  config:
    #访问config server的地址
    #uri: http://localhost:8001
    #对应config server中配置文件的{profile}
    profile: dev
    #对应config server中配置文件的{label}
    label: master
    discovery:
      #表示使用服务发现组件中提供的Config Server,默认是false
      #开启通过服务发现组件访问Config Server的功能
      enabled: true
      #指定Config Server在服务发现组件中的serviceId 默认是configserver
      service-id: microservice-config-server-eureka
eureka:
 client:
  service-url:
   defaultZone: http://localhost:8888/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

修改Config Server

server:
 port: 8001
spring:
 appliation:
  name: microservice-config-server-eureka
 cloud:
  config:
   server:
    git:
     uri: https://github.com/songxiansen521/spring-cloud-config-repo.git
     username: ***your git name***
     password: ***your git pw***
eureka:
 client:
  service-url:
   defaultZone: http://localhost:8888/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

启动Eureka Server,Config Server和Config Client三个项目, 可获取到git仓库中配置文件的内容。

六、 Config Server的高可用

Config Server的高可用可以借助负载均衡实现,其原理图如下:

Config Server的高可用也可借助Eureka实现。 

原文地址:https://www.cnblogs.com/jiadp/p/9277762.html

时间: 2024-12-12 13:04:50

Spring Cloud学习--配置中心(Config)的相关文章

spring cloud 的配置中心config

为啥要配置中心? 微服务架构中,每个项目都有一个yml配置,管理起来麻烦.要使用spring cloud config来统一管理. 它支持配置服务放在配置服务的内存中(即本地),也支持放在远程码云(码云中国的github)仓库中. 在spring cloud config 组件中,分两个角色,一是config server(配置中心),二是config client(客户端配置). 1.1.1. 架构 操作 一:操作码云 1.在码云中建立仓库 下一步 最好选择私有,据说访问要快些 下一步,在新建

用Zookeeper作为Spring cloud的配置中心(转)

本文转自https://blog.csdn.net/CSDN_Stephen/article/details/78856323 Spring Cloud 配置中心的主流实现方式 Spring cloud configSpring cloud zookeeper config以下是这两者的简介 Srping Cloud Config Spring cloud config就是和git(svn)集成来实现配置中心.Spring cloud config分服务端.客户端和git(svn)三部分,服务端

10、服务提供者provider如何使用配置中心config

前面的<配置中心>和<服务注册&服务提供者>这两篇分别讲解了配置中心和服务提供者,但是服务提供者使用的配置文件还是本地的,没有使用配置中心的配置文件.今天看看如何实现服务提供者使用配置中心的配置文件. 1. 新建项目sc-eureka-client-provider-config,项目对应的pom.xml文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h

SpringCloud之配置中心Config

commons 工程commons 工程 - 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://mav

Spring Cloud 学习——6.zuul实现路由、负载均衡、安全验证

1.前言 在一个大微服务架构的系统中,可能存在着很多服务,如果将这些服务全部对外暴露,会带来很多问题.比如安全问题,有些核心服务直接对外暴露很容易被攻击:比如身份验证问题,有些接口服务是要求登录的,如果各种服务各自对外暴露,那么这些要求登录的请求第一个触达的服务模块都要向“用户服务模块”查询鉴权结果,这样既对“用户服务模块”造成额外压力,也增加了这些其它服务模块的开发成本,所以应该考虑将身份验证的事情交到网关模块中直接完成:比如运维难度和成本问题,如果每一种服务都各自对外暴露,那么整个系统就需要

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,从而防止故障进一步扩大(类似中电路中的跳闸,保护家用电器). 使用步骤:(仍然在之前的示例代码上加以改造) 一.添加hystrix依赖 compile 'org.springframework.cloud:spring-cloud-starter-hystrix' 二.在需要熔断的方法上添加注解 package com.cnblogs.y

springcloud应用配置中心config的安全设置

springcloud应用配置中心config的安全设置 在springcloud应用开发中,为了方便在线管理我们的配置文件,通常会配一个配置中心config-server,这里托管着应用的一些配置文件,这些配置文件中配置着我们很多的账号信息:如mysql.redis.mongodb.rabbitmq等等的账号和密码.牵扯到账号信息,想必我们要保证如何保证其安全性. 1.保证容器文件访问的安全性,即保证所有的网络资源请求都需要登录 通过springboot配置属性之security,配置secu

Spring Cloud 学习——5.使用 feign 的 hystrix 支持

1.前言 hystrix 是一个微服务系统的断路器组件,上文介绍了 spring cloud 通过 netfix hystrix 提供对 hystrix 的支持.同时 spring cloud 也提供了 openfeign 的支持, 而 openfeign 本身就已经内置了 hystrix 支持.所以本文介绍一个使用 openfeign 内置 hystrix 的简单示例. 前文链接: Spring Cloud 学习——3.openfeign实现声明式服务调用 Spring Cloud 学习——4

Spring Cloud学习笔记 【篇一:分布式配置中心 Spring Colud Config】

一.简介 Spring Cloud Config提供了在分布式系统的外部配置的客户端支持.通过配置服务(Config Server)来为所有的环境和应用提供外部配置的集中管理.这些概念都通过Spring的Environment和PropertySource来抽象,所以它可以适用于各类Spring应用,同事支持任何语言的任何应用.它也能为你支持对应用开发环境.测试环境.生产环境的配置.切换.迁移.默认的配置实现通过git实现,同事非常容易的支持其他的扩展(比如svn等).在spring cloud