JavaRush /Курсы /Модуль 5. Spring /Лекция 123: Конфигурация Spring Cloud Config Server

Лекция 123: Конфигурация Spring Cloud Config Server

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

Представьте, что у вас есть полсотни микросервисов, каждый из которых зависит от определённых конфигурационных параметров, например, строки подключения к базе данных или ключей доступа к сторонним API. Если вам понадобится изменить даже одну строку, вы должны будете обновить эти параметры во всех сервисах... вручную!

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


Что мы сегодня сделаем?

  1. Установим и настроим Spring Cloud Config Server.
  2. Подключим его к Git в качестве источника конфигураций.
  3. Напишем простую тестовую конфигурацию и проверим, как она отдаётся клиентам.

Создание Spring Cloud Config Server

Шаг 1. Создаём новый проект Spring Boot

Для начала создадим новое Spring Boot-приложение. Мы будем использовать Spring Initializr — генератор проектов, который избавляет нас от рутинной работы.

  1. Открываем Spring Initializr.
  2. Выставляем следующие параметры:
    • Project: Maven.
    • Language: Java.
    • Spring Boot: 3.1.0 (или самая последняя версия).
    • Dependencies: добавляем "Config Server" и "Spring Web".
  3. Скачиваем проект и открываем его в вашей любимой среде разработки (IntelliJ IDEA, Eclipse, VS Code).

Теперь у нас есть базовый проект для Config Server!


Шаг 2. Настраиваем сервер конфигураций

Открываем файл application.properties (или application.yml) в папке src/main/resources и добавляем базовую конфигурацию для Config Server:


# Указываем порт, на котором будет работать сервер
server.port=8888

# Путь к репозиторию с конфигурациями
spring.cloud.config.server.git.uri=https://github.com/example/config-repo

Что здесь происходит?

  • server.port=8888 — стандартный порт для Config Server. Вы можете изменить его при необходимости.
  • spring.cloud.config.server.git.uri — адрес репозитория Git, где хранятся все ваши конфигурации. Мы пока используем публичный репозиторий, но позже разберём и частные.

Шаг 3. Включаем поддержку Config Server

Открываем главный класс нашего приложения (например, ConfigServerApplication) и добавляем аннотацию @EnableConfigServer:


package com.example.configserver;

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

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

Что делает эта магическая аннотация?

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


Подключение к Git-репозиторию

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

Шаг 4. Создаём репозиторий

  1. Зарегистрируйтесь на GitHub (хотя, скорее всего, вы уже давно там!).
  2. Создайте новый репозиторий, например, config-repo.
  3. В корне репозитория создайте файл application.yml со следующими данными:
example:
  message: "Привет, Config Server!"

Теперь в вашем репозитории есть простая конфигурация, которую мы будем запрашивать с нашего Config Server. Не забудьте сделать репозиторий общедоступным, если не хотите настраивать авторизацию!


Шаг 5. Проверка работы Config Server

Запускаем наш Config Server. Если вы используете IntelliJ IDEA, достаточно нажать "Run" для класса ConfigServerApplication.

Теперь откройте браузер и перейдите по адресу http://localhost:8888/application/default. Вы должны увидеть следующую JSON-ответку:

{
  "name": "application",
  "profiles": [
    "default"
  ],
  "label": null,
  "version": "b238f0b5d9cdb7c4237c6f7ee8c197f87e9f4f8a",
  "state": null,
  "propertySources": [
    {
      "name": "https://github.com/example/config-repo/application.yml",
      "source": {
        "example.message": "Привет, Config Server!"
      }
    }
  ]
}

Если вы видите эту JSON-ответку, значит Config Server успешно подключился к вашему Git-репозиторию и отдаёт конфигурацию. Победа! 🎉


Частные репозитории и доступ по ключу

Большинство реальных проектов используют приватные репозитории для хранения конфиденциальных конфигураций. Давайте разберёмся, как настроить доступ.

Шаг 6. Настройка приватного Git-репозитория

Для работы с приватным репозиторием вам понадобится указать имя пользователя и пароль или использовать SSH-ключ. Добавьте следующие настройки в application.properties:


# Для доступа по имени пользователя и паролю
spring.cloud.config.server.git.username=ваш_логин
spring.cloud.config.server.git.password=ваш_пароль

Или настройте SSH-ключ для более безопасного подключения:


# Если используете SSH
spring.cloud.config.server.git.uri=git@github.com:example/config-repo.git
spring.cloud.config.server.git.ignore-local-ssh-settings=false

Важно помнить, что никогда не стоит хранить пароли в явном виде в файлах конфигурации. Мы поговорим об этом подробнее в лекции, посвящённой HashiCorp Vault.


Типичные ошибки и их устранение

1. Ошибка "Could not locate PropertySource"

Если вы видите это сообщение, скорее всего, ваш Config Server не смог найти файл конфигурации. Проверьте, правильно ли указан путь к репозиторию в application.properties, а также убедитесь, что файл application.yml существует в репозитории.

2. Ошибка "Connection refused"

Эта ошибка возникает, если Config Server не может связаться с Git. Проверьте, доступен ли ваш репозиторий, верно ли указаны данные для подключения (URI, имя пользователя, пароль или SSH-ключ).

3. Ошибка синхронизации с Git

Если Config Server не подтягивает изменения из репозитория, попробуйте явно включить опцию для обновления кеша, перезапустив сервер.


Что дальше?

Теперь у нас есть полностью рабочий Config Server, который может забирать конфигурации из Git-репозитория и отдавать их клиентам по запросу. На следующем этапе мы подключим клиентское приложение, чтобы оно использовало эти конфигурации, а также научимся обновлять их динамически.

Поехали дальше! 🚀

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ