У попередніх лекціях ми познайомилися з концепцією централізованого управління конфігураціями та можливостями 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! Уявіть, яку міць він дає для централізованого управління мікросервісами. У наступній лекції навчимося оновлювати конфігурації "на льоту", щоб ваші додатки могли міняти настрій так само швидко, як програмісти міняють код.