
Централизованный сервер конфигурации для распределённых систем с HTTP API, хранилищем на основе Git, шифрованием/дешифрованием свойств и интеграцией с Vault, JDBC и локальными файловыми системами.
//// НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ. ОН БЫЛ СГЕНЕРИРОВАН. Ручные изменения этого файла будут потеряны при следующей генерации. Изменяйте файлы в каталоге src/main/asciidoc/. ////
image::https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master"] image::https://api.codacy.com/project/badge/Grade/f064024a072c477e97dca6ed5a70fccd?branch=master["Codacy code quality", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-config?branch=master&utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-config&utm_campaign=Badge_Grade"]
Spring Cloud Config обеспечивает поддержку внешней конфигурации в распределённой системе как на стороне сервера, так и на стороне клиента. Благодаря Config Server у вас есть централизованное место для управления внешними свойствами приложений во всех средах.
Концепции на стороне клиента и сервера одинаково соотносятся с абстракциями Spring Environment и PropertySource, поэтому они отлично подходят для приложений Spring, но могут использоваться в любых приложениях, работающих на любом языке.
Когда приложение проходит конвейер развёртывания от разработки к тестированию и затем к продакшену, вы можете управлять конфигурацией между этими средами и быть уверенными, что приложения будут иметь всё необходимое для запуска при миграции.
Реализация серверного хранилища по умолчанию использует git, поэтому она легко поддерживает помеченные версии конфигураций сред, а также доступна для широкого спектра инструментов управления содержимым.
Легко добавить альтернативные реализации и подключить их через конфигурацию Spring.
== Возможности
=== Spring Cloud Config Server
Spring Cloud Config Server предоставляет следующие преимущества:
@EnableConfigServer=== Spring Cloud Config Client
Для приложений Spring в частности Spring Cloud Config Client позволяет:
Environment удалёнными источниками свойств.@RefreshScope для Spring @Beans, которые должны быть повторно инициализированы при изменении конфигурации./env для обновления Environment и повторной привязки @ConfigurationProperties и уровней журналирования.
** /refresh для обновления beans с @RefreshScope.
** /restart для перезапуска контекста Spring (по умолчанию отключён).
** /pause и /resume для вызова методов Lifecycle (stop() и start() на ApplicationContext).== Быстрый старт
В этом разделе быстрого старта рассматривается использование как сервера, так и клиента Spring Cloud Config Server.
Сначала запустите сервер следующим образом:
Сервер — это приложение Spring Boot, поэтому при желании вы можете запустить его из своей IDE (главный класс — ConfigServerApplication).
Затем опробуйте клиент следующим образом:
Стратегия поиска источников свойств по умолчанию заключается в клонировании git-репозитория (по адресу spring.cloud.config.server.git.uri) и использовании его для инициализации мини-SpringApplication.
Environment мини-приложения используется для перечисления источников свойств и публикации их в JSON-конечной точке.
HTTP-сервис предоставляет ресурсы следующего вида:
где application внедряется как spring.config.name в SpringApplication (обычно это application в стандартном приложении Spring Boot), profile — активный профиль (или список свойств, разделённых запятыми), а label — необязательная git-метка (по умолчанию master).
Spring Cloud Config Server получает конфигурацию для удалённых клиентов из различных источников. В следующем примере конфигурация берётся из git-репозитория (который должен быть предоставлен), как показано ниже:
Другие источники — это любая совместимая с JDBC база данных, Subversion, Hashicorp Vault, Credhub и локальные файловые системы.
=== Использование на стороне клиента
Чтобы использовать эти возможности в приложении, вы можете создать его как приложение Spring Boot, зависящее от spring-cloud-config-client (пример см. в тестовых случаях для config-client или в примере приложения).
Самый удобный способ добавить зависимость — использовать Spring Boot starter org.springframework.cloud:spring-cloud-starter-config.
Также есть родительский pom и BOM (spring-cloud-starter-parent) для пользователей Maven, а для пользователей Gradle и Spring CLI — файл свойств управления версиями Spring IO. В следующем примере показана типовая конфигурация Maven:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-docs-version}</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>{spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->
Теперь вы можете создать стандартное приложение Spring Boot, например следующий HTTP-сервер:
@SpringBootApplication @RestController public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
Когда этот HTTP-сервер запускается, он получает внешнюю конфигурацию с локального сервера конфигураций по умолчанию (если он запущен) на порту 8888.
Чтобы изменить поведение при запуске, вы можете изменить расположение сервера конфигураций с помощью bootstrap.properties (аналогично application.properties, но для фазы bootstrap контекста приложения), как показано в следующем примере: