Настав час заглибитися в налаштування 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 дає кілька ключових переваг:
- Ієрархічна структура
- Пов'язані параметри легко згрупувати в єдину секцію (наприклад, налаштування бази даних).
- Легко читабельний формат для складних конфігурацій.
- Підтримка профілів
- Зручне керування налаштуваннями для різних оточень — dev, test, prod.
- Підтримка списків
- Наприклад, можна вказувати список 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.ymlapplication-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.
Типові помилки
Декілька моментів, які часто створюють складнощі:
- Суперечливі конфігурації: якщо файл
application.ymlі профіль-специфічний файл містять суперечливі налаштування, активний профіль переозначає основну конфігурацію. - Відсутність активного профілю: не забудь вказати активний профіль через
spring.profiles.active. - Помилки форматування YAML: найменша помилка відступів може поламати додаток.
Для деплою на реальні сервери зазвичай передають профіль через аргументи JVM (-Dspring.profiles.active=prod).
Тепер ти знаєш, як налаштовувати application.yml, ефективно ділити конфігурації на профілі і застосовувати їх у мікросервісах. YAML став твоїм другом у цій подорожі!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ