Центр конфигурации Spring Cloud Config

Spring Boot задняя часть сервер Spring

Spring Cloud Config используется для обеспечения централизованной внешней поддержки конфигурации инфраструктурных и микросервисных приложений в распределенных системах, разделенных на серверные и клиентские.

Сервер — это распределенный центр конфигурации, представляющий собой независимое приложение микрослужбы, клиент — базовые настройки или приложение микрослужбы в распределенной системе, а центр конфигурации предназначен для управления соответствующими конфигурациями.

Центр конфигурации, созданный Spring Cloud Config, не только подходит для приложений, созданных с помощью Spring, но также может использоваться в приложениях, созданных на любом другом языке.

Spring Cloud Config по умолчанию использует Git для хранения информации о конфигурации, что, естественно, поддерживает управление версиями информации о конфигурации.

построить центр конфигурации

Создайте сервер конфигурации проекта Spring Boot, а затем выполните следующие шаги, чтобы завершить создание центра конфигурации.

1. Добавьте зависимости

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

2. Включить центр конфигурации через аннотации

package com.ulyssesss.configserver;

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

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

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

3. Измените конфигурацию

spring.application.name=config-server
server.port=7001

# Git 仓库位置
spring.cloud.config.server.git.uri=https://github.com/Ulyssesss/spring-cloud-config-example.git

# 仓库路径下相对搜索位置,可配置多个
spring.cloud.config.server.git.search-paths=config

# 访问 Git 仓库的用户名
spring.cloud.config.server.git.username=

# 访问 Git 仓库的密码
spring.cloud.config.server.git.password=

4. Создайте репозиторий конфигурации и отправьте изменения

Создайте репозиторий Git и каталог конфигурации, добавьтеulyssesss.properties,ulyssesss-dev.properties, соответственно добавить в конфигурациюfrom=default-1.0иfrom=dev-1.0.

Создайтеconfig-label-testветка, будет номер версии в конфигурационном файле1.0превратиться в2.0.

После отправки изменений и отправки их на удаленное хранилище запустите config-server и получите доступ к информации о конфигурации в соответствии со следующими правилами:

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

Клиент получает конфигурацию

Создайте конфигурационный клиент проекта Spring Boot и напишите клиент следующим образом:

1. Добавьте зависимости

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

2. Добавить конфигурацию

Создайте bootstrap.properties и добавьте соответствующую конфигурацию центра конфигурации.

spring.application.name=ulyssesss
spring.cloud.config.profile=dev
spring.cloud.config.label=config-label-test
spring.cloud.config.uri=http://localhost:7001

Обратите внимание, что вышеуказанные свойства должны быть настроены в bootstrap.properties.

Поскольку приложение Spring Boot будет предпочтительно загружать конфигурацию, отличную от пакета jar приложения, а конфигурация сервера конфигурации через bootstrap.properties приведет к тому, что приложение получит внешнюю конфигурацию с сервера конфигурации, который имеет более высокий приоритет, чем локальная конфигурация.

3. Создайте контроллер для просмотра конфигурации

Создайте ConfigClientController и получите конфигурацию, посетив http://localhost:8080/from.

package com.ulyssesss.configclient;

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

@RestController
public class TestConfigController {

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

    @GetMapping("from")
    public String from() {
        return from;
    }
}

Посетите http://localhost:8080/from, чтобы получить возвращенный результатfrom=dev-2.0. Измените конфигурацию вspring.cloud.config.profileиspring.cloud.config.label, перезапустите приложение и снова перейдите по ссылке, чтобы получить соответствующую информацию о конфигурации.

Конфигурация высокой доступности сервисного режима

Высокая доступность в традиционном режиме не требует дополнительной настройки, достаточно указать все экземпляры config-server на один и тот же Git-репозиторий, а клиент указывает на адрес устройства балансировки нагрузки верхнего уровня при указании config-server.

В сервисном режиме при включении config-server в систему управления сервисом Eureka config-server регистрируется как приложение микросервиса, а клиент получает информацию об экземпляре центра конфигурации из центра регистрации сервисов через имя сервиса.

1. Добавьте серверные зависимости

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

2. Аннотация для включения службы обнаружения

package com.ulyssesss.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServerApplication {

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

3. Добавьте конфигурацию сервера

spring.application.name=config-server
server.port=7001

# Git 仓库位置
spring.cloud.config.server.git.uri=https://github.com/Ulyssesss/spring-cloud-config-example.git

# 仓库路径下相对搜索位置,可配置多个
spring.cloud.config.server.git.search-paths=config

# 访问 Git 仓库的用户名
spring.cloud.config.server.git.username=

# 访问 Git 仓库的密码
spring.cloud.config.server.git.password=

# 服务注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

4. Добавьте клиентские зависимости

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

5. Клиент включает функцию обнаружения службы

package com.ulyssesss.configclient;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {

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

6. Измените конфигурацию клиента

spring.application.name=ulyssesss
spring.cloud.config.profile=test
spring.cloud.config.label=config-label-test
#spring.cloud.config.uri=http://localhost:7001

# 服务注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
# 启用配置客户端的服务发现功能
spring.cloud.config.discovery.enabled=true
# 指定配置中心的服务名
spring.cloud.config.discovery.service-id=config-server

Конфигурация динамического обновления

Иногда необходимо обновлять содержимое конфигурации в режиме реального времени. Spring Cloud Config может реализовать эту функцию через привод.

1. Клиент добавляет зависимости

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

2. Добавьте аннотацию диапазона обновления

package com.ulyssesss.configclient;

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;

@RefreshScope
@RestController
public class TestConfigController {

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

    @GetMapping("from")
    public String from() {
        return from;
    }
}

Измените значение from в конфигурации, отправьте его в удаленное хранилище и получите доступ к http://localhost:8080/refresh с помощью метода post, чтобы обновить значение элемента конфигурации.

Обратите внимание, что аутентификация безопасности включена по умолчанию в spring boot 1.5 и выше, а аутентификацию безопасности можно отключить с помощью следующей конфигурации.

# 关闭安全认证
management.security.enabled=false

исходный адрес

образец кодаДобро пожаловать в Звезду