JavaRush /Курсы /Модуль 5. Spring /Лекция 122: Введение в Spring Cloud Config

Лекция 122: Введение в Spring Cloud Config

Модуль 5. Spring
13 уровень , 1 лекция
Открыта

Прежде, чем начинать разбираться с особенностями Spring Cloud Config, вообразите следующую ситуацию. Вы разработали сложное микросервисное приложение, которое состоит из десятков микросервисов. Каждый микросервис имеет свои настройки: пути к сторонним API, учетные данные для баз данных, логирование, настройки кэширования и т.д. Теперь представьте, что нужно изменить одну из конфигураций, например, URL стороннего REST API. Для этого вам пришлось бы вручную обновлять настройки в каждом сервисе, перекомпилировать и перезапускать их. Неудобно? Еще как...

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

Основные преимущества Spring Cloud Config

  • Централизованность: все конфигурации хранятся в одном месте.
  • Динамическое обновление: возможность изменять настройки без перезапуска приложений.
  • Поддержка версионирования: использование Git позволяет отслеживать изменения конфигураций.
  • Безопасность: конфигурации могут быть защищены с использованием таких инструментов, как HashiCorp Vault.
  • Простота интеграции: благодаря Spring Boot приложения легко подключаются к Spring Cloud Config.

Архитектура Spring Cloud Config

Spring Cloud Config состоит из двух основных компонентов:

  1. Config Server — отвечает за предоставление конфигурационных данных. Это централизованный сервер, который может интегрироваться с различными хранилищами данных, например:
    • Git (большинство реальных кейсов);
    • файловая система;
    • база данных или облачные хранилища.
  2. Config Client — любое Spring Boot-приложение, которое получает настройки от Config Server.

Схема взаимодействия выглядит так:


+-----------------+       +--------------------------+       +--------------------+
| Config Repository | <---> Spring Cloud Config Server <---> Spring Boot Client |
+-----------------+       +--------------------------+       +--------------------+

Настройки Config Server

Spring Cloud Config Server — это обычное Spring Boot-приложение, которое использует зависимости для работы с репозиторием конфигураций. Он будет запущен отдельно и предоставлять настройки через REST API.


Как это работает?

  1. Config Server стартует и подключается к указанному источнику данных (например, Git). Он считывает конфигурационные файлы, которые вы разместили в репозитории.
  2. Config Client подключается к серверу и делает запросы для получения конфигураций, соответствующих имени микросервиса и, возможно, текущему профилю (dev, prod и т.д.).

Пример запроса клиента:

GET http://localhost:8888/config-service/dev

Совет: для большей гибкости сервер может поддерживать разные форматы файлов, такие как .properties и .yml.


Основные компоненты Spring Cloud Config Server

1. Источники данных

Spring Cloud Config Server поддерживает множественные источники данных:

  • Git (де-факто стандарт);
  • Файловая система (для локальной разработки);
  • JDBC (в случаях, когда конфигурации хранятся в базе данных).

2. Поддержка профилей

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

Пример структуры конфигураций в репозитории Git:


config-repo/
├── application.yml
├── application-dev.yml
├── application-prod.yml
└── service-one-prod.yml

Интеграция с Git

Git — это самый удобный и популярный способ хранения конфигураций. Почему? Ну, во-первых, потому что вы можете отслеживать изменения. Если кто-то случайно изменит значение переменной MAX_CONNECTIONS с 10 на 1000 (что может привести к падению системы), вы легко найдете этого "шутника".

Пример: .yml файл в репозитории Git:


server:
  port: 8080
database:
  url: jdbc:mysql://localhost:3306/mydb
  username: admin
  password: secret

Как настроить Spring Cloud Config Server?

1. Подключение необходимых зависимостей

Для работы Config Server добавьте следующую зависимость в файл pom.xml:


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

И не забудьте указать Spring Cloud версию в pom.xml:


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2022.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. Включение Config Server

Добавьте аннотацию @EnableConfigServer в ваш Application класс:


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

3. Настройка application.yml

Укажите, где хранятся конфигурации. Например, в Git-репозитории:


server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo
          default-label: main

Вы также можете указать локальную файловую систему:


spring:
  cloud:
    config:
      server:
        native:
          searchLocations: file:///path/to/config-repo

4. Тестируем Config Server

Запустите сервер и убедитесь, что он предоставляет данные. Например, для файла application-dev.yml из Git:


GET http://localhost:8888/application/dev

Пример ответа:


{
  "name": "application",
  "profiles": ["dev"],
  "propertySources": [
    {
      "name": "https://github.com/your-repo/config-repo/application-dev.yml",
      "source": {
        "server.port": "8080",
        "database.url": "jdbc:mysql://dev-server:3306/dev-db"
      }
    }
  ]
}

Заключение: Почему это так важно?

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

Пока можете потренироваться с настройкой Config Server и Git, а заодно подумать, как здорово, что не нужно вручную обновлять десятки сервисов!
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ