JavaRush /Курси /Модуль 5. Spring /Лекція 174: Налаштування Spring Boot мікросервісів з конф...

Лекція 174: Налаштування Spring Boot мікросервісів з конфігураціями через application.yml

Модуль 5. Spring
Рівень 12 , Лекція 3
Відкрита

Настав час заглибитися в налаштування Spring Boot додатків. Сьогодні навчимося організовувати конфігурації через application.yml, розберемо переваги YAML над .properties, освоїмо багатопрофільні конфігурації і зрозуміємо, як застосовувати різні налаштування для різних оточень (наприклад, dev, test, prod).


Що таке application.yml?

Коли ми вивчали Docker Compose, вже стикалися з YAML (YAML Ain't Markup Language). Нагадаю, це зручний формат для написання конфігураційних файлів. Його основні переваги:

  • Читабельність: менше "шуму", ніж у .properties (немає повторюваних ключів для груп налаштувань).
  • Ієрархічна структура: конфігурація легко групується у вигляді дерева.
  • Підтримка складних об'єктів: списки та вкладені структури даних.

Для порівняння, конфігурація в .properties:


server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

І та сама конфігурація в application.yml:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret

Погодьтесь, application.yml виглядає менш захаращеним. Spring Boot підтримує обидва формати, але YAML частіше використовується в сучасних проєктах.


Робота Spring Boot з конфігураціями

Spring Boot автоматично підвантажує конфігураційні файли з директорії src/main/resources. Найпоширеніший файл для конфігурації — це application.yml. Він дозволяє задати налаштування додатку, такі як:

  • Порт сервера
  • Налаштування підключення до бази даних
  • Налаштування кешування і безпеки

Spring Boot визначає параметри з файла і автоматично застосовує їх до відповідних компонентів.


Переваги використання application.yml

Використання application.yml дає кілька ключових переваг:

  1. Ієрархічна структура
    • Пов'язані параметри легко згрупувати в єдину секцію (наприклад, налаштування бази даних).
    • Легко читабельний формат для складних конфігурацій.
  2. Підтримка профілів
    • Зручне керування налаштуваннями для різних оточень — dev, test, prod.
  3. Підтримка списків
    • Наприклад, можна вказувати список URL-адрес у конфігурації.

Приклад списку:

my-service:
  servers:
    - http://localhost:8081
    - http://localhost:8082
    - http://localhost:8083

Структурування і групування налаштувань

Ієрархія в YAML дозволяє логічно впорядкувати конфігураційні параметри.

Налаштування сервера

Налаштуємо порт для нашого мікросервісу:


server:
port: 8080

Також можна задати властивості, пов'язані з кодуванням:

server:
  port: 8080
  spring:
    messages:
      encoding: UTF-8

Налаштування бази даних

Підключення до бази даних — одне з найпоширеніших завдань в Spring Boot. Розглянемо налаштування:


  spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  • url — адреса бази даних.
  • ddl-auto — стратегія управління схемою бази даних (наприклад, update, create-drop).
  • show-sql — дозволяє виводити SQL-запити в логи.

Профілі конфігурації

У реальних проєктах зазвичай є різні конфігурації для розробки (dev), тестування (test) і продакшена (prod). Наприклад:

  • На dev-середовищі використовують базу даних H2 (in-memory).
  • На prod-середовищі використовують MySQL.

Spring Boot дозволяє задавати такі налаштування через профілі.

Активний профіль вказується в application.yml:

spring:
  profiles:
    active: dev

Або можна передати профіль в аргументах командного рядка:


java -Dspring.profiles.active=prod -jar myapp.jar

Розділення конфігурації по профілях

У кожного профілю може бути свій файл конфігурації, наприклад:

  • application-dev.yml
  • application-prod.yml

Приклад application-dev.yml:


  spring:
  datasource:
    url: jdbc:h2:mem:devdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create

Приклад application-prod.yml:

spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/mydb
    username: admin
    password: securepassword
  jpa:
    hibernate:
      ddl-auto: validate

Конфігурація за замовчуванням

Основний файл application.yml може містити загальні налаштування:


  server:
  port: 8080
spring:
  jpa:
    show-sql: true

Spring Boot спочатку підвантажує application.yml, а потім профіль-специфічні налаштування (application-dev.yml або application-prod.yml), переозначаючи властивості.


Практика: Налаштування мікросервісу з application.yml

Крок 1: Створимо новий проєкт

Використай Spring Initializr для створення проєкту:
Dependencies: Spring Web, Spring Data JPA, MySQL Driver.

Пам'ятай жарт: "Якщо не використовуєш Spring Initializr, то ти надто любиш біль. Він існує, щоб ти натискав кнопку 'Generate'".

Крок 2: Налаштуємо application.yml

Додай файл application.yml в директорію src/main/resources:


server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

Крок 3: Додамо профілі

Створи файли application-dev.yml і application-prod.yml.

Приклад: application-dev.yml:

spring:
  datasource:
    url: jdbc:h2:mem:devdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create

Приклад: application-prod.yml:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/mydb
    username: admin
    password: securepassword

Встанови активний профіль:


  spring:
  profiles:
    active: dev

Крок 4: Реалізуємо простий REST API

Створи контролер:


@RestController
@RequestMapping("/api/customers")
public class CustomerController {

    @GetMapping
    public String getAllCustomers() {
        return "Список усіх клієнтів!";
    }
}

Крок 5: Запустимо додаток

Запусти додаток і перейдіть за адресою:
http://localhost:8081/api/customers.


Типові помилки

Декілька моментів, які часто створюють складнощі:

  1. Суперечливі конфігурації: якщо файл application.yml і профіль-специфічний файл містять суперечливі налаштування, активний профіль переозначає основну конфігурацію.
  2. Відсутність активного профілю: не забудь вказати активний профіль через spring.profiles.active.
  3. Помилки форматування YAML: найменша помилка відступів може поламати додаток.

Для деплою на реальні сервери зазвичай передають профіль через аргументи JVM (-Dspring.profiles.active=prod).


Тепер ти знаєш, як налаштовувати application.yml, ефективно ділити конфігурації на профілі і застосовувати їх у мікросервісах. YAML став твоїм другом у цій подорожі!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ