配置中心

配置中心

概念

为什么需要配置中心

单体应用,配置写在配置文件中,没有什么大问题

如果要切换环境,可以切换不同的profile(2种方式),但在微服务中

  • 微服务比较多,成百上千,配置很多,需要集中管理
  • 管理不同环境的配置
  • 需要动态调整配置参数,更改配置不停服

配置中心介绍

分布式配置中心包括3个部分:

  • 存放配置的地方:git ,本地文件等
  • config server:从 1 读取配置
  • config client:是 config server 的客户端消费配

配置都不会自己更新,都是需要触发client才去git上拉取的或者触发在config-server上查看配置时,才去git上拉取

使用

  • 环境部署之前,将所需的配置信息推送到配置仓库
  • 启动配置中心服务端,将配置仓库的配置信息拉取到服务端,配置服务端对外提供RESTful接口
  • 启动配置客户端,客户端根据 spring.cloud.config 配置的信息去服务器拉取相应的配置

创建4个配置文件

config-client-dev.yml

env: dev

Config Server

官方地址:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server

添加依赖

<!-- 配置中心服务端:config-server -->
<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>

yml

spring: 
    cloud:
        config:
            server:
                git:
                uri: https://github.com/xxxxx
                username: 
                password: 
                #默认是秒,因为git慢
                timeout: 15

启动类

添加注解

@EnableConfigServer

测试:

启动eureka,config-server

访问:

http://localhost:6001/config-client-dev.yml

http://localhost:6001/config-client-dev.properties

http://localhost:6001/config-client-dev.json

获取配置规则:根据前缀匹配

  • /{name}-{profiles}.properties
  • /{name}-{profiles}.yml
  • /{name}-{profiles}.json
  • /{label}/{name}-{profiles}.yml
  • name 服务名称
  • profile 环境名称,开发、测试、生产:dev qa prd
  • lable 仓库分支、默认master分支

匹配原则:最左前

换分支

dev分支上:config-client-dev.yml

#服务端口
server: 
    port: 8001
    env: branch-dev-dev

访问

  • http://localhost:6001/dev/config-client-dev.yml
  • http://localhost:6001/dev/config-client-dev.json

不写分支,默认是master

Config client

discovery方式

pom

<!-- 配置中心客户端:config-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>

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

<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml

server:
    port: 8011

bootstrap.yml

#应用名称,配置文件名,此时:congif-client-dev.yml
spring: 
    application: 
        name: config-client
    cloud: 
        config:
            discovery:
        enabled: true
        # config server 的服务id
        service-id: config-server
        # 环境
        profile: dev
        # 分支
        label: master 

代码

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

访问

http://localhost:8011/config/env0

远程配置已经拉过来了

url方式

```sh
spring:
cloud:
config:
# 和下面的discovery互斥
# uri:
# - http://localhost:6001
```

论读书
睁开眼,书在面前
闭上眼,书在心里
原文地址:https://www.cnblogs.com/YC-L/p/14535066.html