В этой лекции мы будем настраивать 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, готовый к использованию в микросервисной архитектуре. И каждый разработчик микросервисов скажет вам: "Пусть конфигурации будут с вами!"
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ