JavaRush /Курсы /Модуль 5. Spring /Лекция 124: Практика: настройка Config Server для хранени...

Лекция 124: Практика: настройка Config Server для хранения конфигураций

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

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


1. Настройка Spring Cloud Config Server

Создаём новый Spring Boot-проект

Для начала создадим Spring Boot-проект, который будет представлять наш Config Server. Используем Spring Initializer для генерации проекта.

  • Dependencies:
    • Spring Cloud Config Server
    • Spring Boot Actuator (для мониторинга состояния)

Структура проекта

После импорта проекта в вашу IDE, структура должна выглядеть следующим образом:


config-server/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com.example.configserver/
│   │   │       └── ConfigServerApplication.java
│   │   └── resources/
│   │       ├── application.yml
│   │       ├── static/
│   │       └── templates/
├── mvnw
├── pom.xml
└── README.md

pom.xml

Открываем pom.xml и добавляем следующие зависимости:


<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

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

Это ключевые зависимости для работы Spring Cloud Config Server.


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

Теперь переходим к настройке нашего Config Server. Создадим файл application.yml в папке src/main/resources с базовыми настройками:


server:
  port: 8888 # Стандартный порт для Config Server

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/ваш-аккаунт/репозиторий-с-конфигурациями.git
          default-label: main # Ветка по умолчанию

Здесь:

  • server.port задаёт порт, на котором Config Server будет работать.
  • spring.cloud.config.server.git.uri указывает на удалённый Git-репозиторий, из которого сервер будет читать конфигурации.
  • default-label определяет ветку, используемую по умолчанию (чаще всего main или master).

Активируем Config Server

Следующий шаг — активировать наш 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);
    }
}

Эта аннотация творит магию: превращает наше приложение в полноценный Config Server.


2. Подготовка Git-репозитория для конфигураций

Теперь пора подготовить Git-репозиторий, который будет хранить конфигурационные файлы. Вы можете использовать локальный репозиторий или GitHub.

Шаг 1: Создаём структуру файлов

Создайте новый репозиторий с примерно таким содержимым:


config-repo/
├── application.yml
├── service-one.yml
└── service-two.yml
Пример application.yml:
common:
  message: "Это общая конфигурация для всех сервисов"
Пример service-one.yml:
server:
  port: 8081
service:
  name: "Service One"
Пример service-two.yml:
server:
  port: 8082
service:
  name: "Service Two"

Шаг 2: Загружаем данные в Git

Теперь коммитим и пушим файлы в наш Git-репозиторий.

git add .
git commit -m "Добавлены файлы конфигурации"
git push origin main

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

Теперь пора проверить, как работает наш Config Server. Запустите приложение (да, жмите зелёную кнопочку в вашей IDE).

Проверяем работу сервера

Откройте браузер или Postman и введите следующий URL:

  • Общая конфигурация:
    http://localhost:8888/application/default
  • Конфигурация для первого сервиса:
    http://localhost:8888/service-one/default
  • Конфигурация для второго сервиса:
    http://localhost:8888/service-two/default

Вы должны увидеть JSON-ответ с конфигурациями из Git-репозитория.


4. Подключение клиента к Config Server

Давайте теперь создадим клиент (наш условный микросервис), который будет читать конфигурации с Config Server.

Настройка клиента

Создайте ещё один проект через Spring Initializr (например, service-one) с зависимостью Spring Cloud Starter Config.

Конфигурация клиента (application.yml):

spring:
  application:
    name: service-one
  cloud:
    config:
      uri: http://localhost:8888 # URL Config Server

Основной класс клиента:


package com.example.serviceone;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ServiceOneApplication {

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

Проверяем клиент

Запустите клиентское приложение. Оно автоматически подтянет конфигурации с Config Server. Вы можете проверить это, добавив точку доступа, например, REST-контроллер:


package com.example.serviceone.controller;

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

@RestController
public class ConfigController {

    @Value("${service.name}")
    private String serviceName;

    @GetMapping("/config")
    public String getConfig() {
        return "Service name is: " + serviceName;
    }
}

Перейдите по адресу http://localhost:8081/config, и вы должны увидеть:
Service name is: Service One.


5. Устранение возможных проблем

  • "Config Server не может подключиться к Git-репозиторию":
    проверьте, указаны ли правильные URL и токены доступа (если репозиторий приватный).
  • "Клиент не может получить конфигурацию":
    убедитесь, что Config Server запущен, и клиент указывает правильный spring.cloud.config.uri.

Напоминаем: Config Server кэширует данные. Если конфигурации в Git изменились, используйте POST запрос к http://localhost:8888/actuator/refresh, чтобы обновить их.

curl -X POST http://localhost:8888/actuator/refresh

Теперь у вас есть рабочий Spring Cloud Config Server, готовый к использованию в микросервисной архитектуре. И каждый разработчик микросервисов скажет вам: "Пусть конфигурации будут с вами!"

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