JavaRush /Курси /Модуль 5. Spring /Конфігурація через application.properties і application.y...

Конфігурація через application.properties і application.yml

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

Зануримося в конфігурації. Кожен Spring Boot проект починається з питання: "Де зберігати налаштування?". Spring Boot відповідає просто: використовуйте application.properties або application.yml. Ці два файли — ніби центр керування польотами для вашого застосунку, де кожен рядок може визначити його долю: від тріумфального злету до епічного падіння.

Spring Boot шукає ці файли в src/main/resources — стандартному місці для всіх ресурсів проекту. Це логічно: конфігурація теж ресурс, просто особливий — вона визначає, як ваш застосунок поводитиметься в різних ситуаціях. І повірте, правильна конфігурація може перетворити навіть найпростіший застосунок на надійний корпоративний сервіс.

Що налаштовуємо?

  • Порт сервера: на якому порті має працювати застосунок.
  • Базу даних: URL підключення, ім'я користувача, пароль тощо.
  • Профілі застосунку: різні налаштування для середовища розробки, тестування і продакшену.
  • Параметри логування: рівень логів, формат виводу тощо.

Різниця між application.properties і application.yml

Ви вже, напевно, стикалися з питанням "що краще — JSON чи XML?", тепер вас чекають подібні баталії між application.properties і application.yml.

application.properties

Це формат "ключ-значення", знайомий і зрозумілий більшості розробників. Ось приклад:


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

Переваги:

  • Простий і лаконічний.
  • Легко читається і редагується.

Недоліки:

  • Для складних конфігурацій (наприклад, масивів) стає громіздким.
  • Позбавлений візуальної структури, що може ускладнити сприйняття великих файлів.

application.yml

Якщо properties здаються занадто пласкими, познайомтесь з YAML (так, це рекурсивний акронім: "YAML Ain't Markup Language"). YAML робить конфігурацію більш наочною завдяки відступам і древоподібній структурі. Дивіться самі:


server:
  port: 8080

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

Переваги:

  • Підтримує вкладені структури, що робить його більш читабельним.
  • Ідеальний для складних конфігурацій.

Недоліки:

  • Потребує акуратного поводження з відступами (не той рівень відступу — і привіт, помилки).

Насправді, вибір між ними визначається вашим смаком і складністю проекту. Але для великих застосунків YAML часто переважніший.


Керування профілями в Spring Boot

Уявіть, що ваш застосунок має поводитись по-різному в різних середовищах: розробка (dev), тестування (test), продакшен (prod). Для цього Spring Boot пропонує механізм профілів.

Як налаштувати профілі?

Все просто: додайте до свого конфігураційного файлу назву профілю. Наприклад:

  • application-dev.properties або application-dev.yml
  • application-prod.properties або application-prod.yml

А в основному файлі application.properties або application.yml вкажіть активний профіль:


spring.profiles.active=dev

Або, якщо ви фанат YAML:


spring:
  profiles:
    active: dev

Як змінити активний профіль?

Профіль можна також вказати через:

  1. Аргументи командного рядка:
    
    java -jar myapplication.jar --spring.profiles.active=prod
    
  2. Змінні оточення:
    
    export SPRING_PROFILES_ACTIVE=prod
    

Ця функціональність дозволяє вам безболісно перемикатися між профілями, як між вкладками браузера.


Види параметрів конфігурації

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

Тут все просто. Хочете змінити порт, на якому працює ваш вбудований сервер? Легко:


server.port=8081

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

Підключення до бази даних теж не займе багато часу:


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

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

Логування

Щоб налаштувати рівень логування:


logging.level.org.springframework=INFO
logging.level.com.myapp=DEBUG

logging:
  level:
    org.springframework: INFO
    com.myapp: DEBUG

Запам'ятайте, хороше логування — як хороша діаграма: багато пояснює, але не перевантажує деталями.


Переваги використання YAML

Простота роботи зі складними структурами

YAML дозволяє задавати масиви і карти прямо в структурі:


myapp:
  features:
    - feature1
    - feature2
    - feature3

У випадку properties вам довелося б писати щось на кшталт цього:


myapp.features[0]=feature1
myapp.features[1]=feature2
myapp.features[2]=feature3

Покращена читабельність

YAML з його вкладеними структурами (і підтримкою пробілів замість символів .) читається легше:


server:
  port: 8080
spring:
  datasource:
    username: root
    password: secret

Застосування на практиці

Давайте зробимо невеликий приклад, щоб закріпити матеріал. Створимо простий застосунок, який читає конфігураційні параметри з файлу application.yml.

Крок 1: Створюємо application.yml


server:
  port: 8080

app:
  title: "Spring Boot Config Demo"
  description: "Це наш приклад застосунку з використанням YAML."

author:
  name: "Іван Іванов"
  email: "ivan@example.com"

Крок 2: Читання параметрів у коді

Spring надає анотацію @Value, щоб отримувати значення з конфігураційного файлу. Ось приклад:


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("${app.title}")
    private String appTitle;

    @Value("${app.description}")
    private String appDescription;

    @Value("${author.name}")
    private String authorName;

    @GetMapping("/config")
    public String getAppConfig() {
        return String.format("%s - %s (автор: %s)", appTitle, appDescription, authorName);
    }
}

Тепер, якщо запустите застосунок, зможете відкрити в браузері http://localhost:8080/config і побачити результат.


Типові помилки при роботі з конфігураціями

  1. Помилка з відступами в YAML. Якщо файл не парситься, переконайтеся, що використовуєте пробіли, а не табуляцію.
  2. Зайві пробіли в application.properties. Лишні пробіли у ключах або значеннях можуть призводити до несподіваних проблем.
  3. Некоректне вказання профілю. Якщо профіль неактивний, його конфігурації не застосовуються.

На цьому етапі у вас вже має бути повний контроль над світом Spring Boot конфігурацій. Все в ваших руках! Наприклад, ви можете налаштувати девелоперське оточення, тестове і продакшен так, щоб вони працювали як годинник.

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