Spring Cloud Config分布式配置中心 ,微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度可能相对较小,所以系统中可能会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式、动态的配置管理设施是很有必要的。Spring Cloud提供了ConfigServer来解决这个问题。

1.主要功能

  1. 集中管理配置文件
  2. 不同环境不同配置,动态化更新
  3. 运行期间动态调整配置,不要在每个服务部署的机器上写一份配置
  4. 当配置发生变化时,不要重启相应的服务即可感知到配置的变化并应用新的更新。
  5. 将配置以REST接口暴露。

2. 新建Github仓库

Github上面新建一个sping-cloud-config仓库

在该仓库新建三个配置文件

  • config-dev.yml
  • config-test.yml
  • config-product.yml

3. 配置中心搭建

新建一个 cloud-config-center 项目作为配置中心

3.1 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>live.yremp.springcloud</artifactId>
        <groupId>live.yremp</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-config-center3344</artifactId>

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

3.2 配置文件

server:
  port: 3344

spring:
  application:
    name: cloud-config-center

  cloud:
    config:
      server:
        git:
          uri: https://github.com/yremp/spring-cloud-config.git
          search-paths: spring-cloud-config
      label: master

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

3.3 主启动类

package live.yremp.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

3.4 测试访问配置文件

启动主启动类,访问 http://localhost:3344/master/config-dev.yml

4. Confg客户端配置

新建一个客户端测试配置文件的读取

4.1 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>live.yremp.springcloud</artifactId>
        <groupId>live.yremp</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-config-client3355</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

4.2 配置文件

新建一个bootstrap.yml (系统级别的配置文件,优先级更高)

server:
  port: 3355

spring:
  application:
    name: config-client

  cloud:
    config:
      label: master  #分支名称
      name: config   #配置文件名称
      profile: dev   #读取后缀名称   #上面的配置读取master的config-dev.yml
      uri: http://localhost:3344   #配置中心地址

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

4.3 主启动类

package live.yremp.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient

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

4.4 启动测试

启动客户端服务,访问 http://localhost:3355/configinfo

可以看到读取成功

5. 动态读取配置

如果github上面修改了配置文件版本号修改为为2

config:
  info: "master branch,springcloud-config/config-dev.yml version=2" 

5.1 服务端读取

修改完GitHub上面的配置文件,服务端 cloud-config-center 3355 测试读取

5.2 客户端读取

此时访问客户端 cloud-config-client3355 读取

不能动态读取配置的更新,要想动态读取配置,需要下面几个步骤

5.3 添加依赖

添加下面的监控依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

5.4 修改配置文件

在配置文件中添加下面的内容

management:
  endpoint:
    web:
      exposure:
        include: "*"

5.5 添加注解

在Controller添加 @RefreshScope 注解,如下:

package live.yremp.springcloud.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;

@RestController
@RefreshScope
public class ConfigController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configinfo")
    public String getConfigInfo(){
        return configInfo;
    }
}

5.6 Post请求刷新

完成上面的几个步骤,还是不能够刷新,但是需要一步,发送一个post请求刷新

curl -X  POST "http://localhost:3355/actuator/refresh"

因为 上面已经重启了客户端服务,自然可以获取到version=2,所以启动之后再去修改一次配置

config:
  info: "master branch,springcloud-config/config-dev.yml version=3" 

此时再发送请求即可刷新,获取最新的配置

标签云

ajax AOP Bootstrap cdn Chevereto CSS Docker Editormd GC Github Hexo IDEA JavaScript jsDeliver JS樱花特效 JVM Linux Live2D markdown Maven MyBatis MyBatis-plus MySQL Navicat Oracle Pictures QQ Sakura SEO Spring Boot Spring Cloud Spring Cloud Alibaba SpringMVC Thymeleaf Vue Web WebSocket Wechat Social WordPress Yoast SEO 代理 分页 图床 小幸运 通信原理

Spring Cloud Config分布式配置中心