В предыдущих лекциях мы познакомились с концепцией централизованного управления конфигурациями и возможностями Spring Cloud Config. Сегодня мы не будем углубляться в теорию, а сразу перейдём к практике, потому что, как говорится, теория без практики — это как код без тестов: вроде работает, но что-то не так.
Сегодня мы создадим Spring Cloud Config Server, подключим его к репозиторию Git и проверим, как он раздаёт конфигурации. Погнали!
Шаг 1: Создание проекта Spring Cloud Config Server
1.1 Используем Spring Initializr
Создать новый проект можно на сайте Spring Initializr или через ваш любимый IDE. Вот основные параметры, которые нужно указать:
- Project: Maven
- Language: Java
- Spring Boot Version: 3.0.0 (или последняя стабильная версия)
- Dependencies: добавляем Spring Cloud Config Server
Или же просто скопируйте эту строку в ваш pom.xml, если создаёте проект вручную:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
И не забудьте добавить BOM для Spring Cloud, чтобы всё работало корректно:
<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>
Теперь у вас есть базовый проект!
1.2 Аннотация @EnableConfigServer
Для того чтобы наш проект мог стать Config Server, достаточно одной магической аннотации. Открываем файл Application.java и добавляем:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer // Включаем функциональность Spring Cloud Config Server
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Коротко и мощно.
Шаг 2: Настройка хранилища конфигураций
2.1 Настраиваем Git-репозиторий
Настройки Config Server будут храниться в репозитории Git. Для этого:
- Создайте пустой репозиторий на GitHub, GitLab или в локальной системе.
- Добавьте простой конфигурационный файл. Например, создайте
application.propertiesилиapplication.yml:
# application.properties в репозитории
example.property=Hello from the Config Server!
Подсказка: имя файла должно соответствовать формату {application-name}.properties или {application-name}.yml. Это важно для распределения конфигураций между микросервисами.
2.2 Конфигурация Config Server
Теперь нужно указать Config Server, где искать конфигурационные файлы.
В application.yml нашего Config Server приложения добавляем следующий блок:
server:
port: 8888 # Config Server будет работать на порту 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/ваш-пользователь/ваш-репозиторий # Укажите URL репозитория
default-label: main # Ветка репозитория (main, master или другая)
Если ваш репозиторий закрыт (приватный), добавьте логин и пароль:
spring:
cloud:
config:
server:
git:
uri: https://github.com/ваш-пользователь/ваш-репозиторий
username: ваш-логин
password: ваш-пароль
2.3 Проверяем работу Config Server
Запустите ваше приложение Config Server. Если всё настроено правильно, перейдите по адресу:
http://localhost:8888/{application}/{profile}/{label}
Пример:
http://localhost:8888/application/default
Это вернёт данные конфигурации из репозитория Git. Вы увидите что-то вроде:
{
"name": "application",
"profiles": ["default"],
"label": "main",
"version": "123abc",
"propertySources": [
{
"name": "https://github.com/ваш-пользователь/ваш-репозиторий/application.properties",
"source": {
"example.property": "Hello from the Config Server!"
}
}
]
}
Поздравляю! Ваш Config Server работает.
Шаг 3: Подключение клиента к Config Server
3.1 Настройка клиента
Теперь создадим клиентское приложение, которое будет получать конфигурации с Config Server.
- Создайте новый Spring Boot проект.
- Добавьте зависимость Spring Cloud Config Client:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- Настройте файл
application.ymlклиента:
spring:
application:
name: my-client-application # Имя приложения должно совпадать с конфигурационным файлом в репозитории (my-client-application.properties)
cloud:
config:
uri: http://localhost:8888 # URL нашего Config Server
3.2 Используем полученные конфигурации
Создадим REST-контроллер, чтобы проверить, получили ли мы конфигурацию. Например:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigClientController {
@Value("${example.property}") // Получаем значение из Config Server
private String exampleProperty;
@GetMapping("/config")
public String getConfig() {
return "Value of 'example.property' is: " + exampleProperty;
}
}
Теперь запускаем клиент и открываем:
http://localhost:8080/config
Вы увидите:
Value of 'example.property' is: Hello from the Config Server!
Типичные ошибки и их исправление
Если ваш Config Server или клиент не работает, вот несколько проверок:
- Config Server возвращает ошибку 404, 401 или 500. Проверьте:
- URL и доступность репозитория.
- Логин/пароль (если репозиторий приватный).
- Находятся ли конфигурационные файлы в указанной ветке.
Клиент не может подключиться к Config Server.
- Проверьте
spring.cloud.config.uriв конфигурации клиента. - Убедитесь, что Config Server запущен и доступен по указанному порту.
- Проверьте
Клиент не получает конфигурацию.
- Убедитесь, что имя клиента (
spring.application.name) совпадает с названием файла в репозитории. - Убедитесь, что файл доступен и корректен.
- Убедитесь, что имя клиента (
Теперь у вас есть рабочий Spring Cloud Config Server! Представьте, какую мощь он даёт для централизованного управления микросервисами. В следующей лекции мы научимся обновлять конфигурации "на лету", чтобы ваши приложения могли менять настроение так же быстро, как программисты меняют код.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ