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
образец кодаДобро пожаловать в Звезду