JavaRush /Курси /Модуль 5. Spring /Лекція 229: Використання різних профілів конфігурації в S...

Лекція 229: Використання різних профілів конфігурації в Spring Boot

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

Уяви, що тобі потрібно керувати різними параметрами твоєї системи для різних середовищ — наприклад, розробки (development), тестування (test) і продакшена (production). У світі Spring це легко реалізується за допомогою профілів конфігурації.

Навіщо це потрібно?

  • Різні налаштування для середовищ. Наприклад, для розробки використовують локальну базу даних, а для продакшена — хмарну.
  • Перемикання конфігурацій на льоту. Міняєш налаштування, не переписуючи код.
  • Підвищення безпеки. Конфіденційні параметри для продакшена можна зберігати окремо.

Якби профілі не існували, ти, швидше за все, просто тримав би різні файли конфігурації для кожного середовища й вручну копіював потрібний перед стартом. Звучить не дуже весело, але Spring позбавляє нас від цієї рутини.


Як працюють профілі в Spring Boot?

У Spring Boot кожен профіль — це набір конфігурацій, які застосовуються тільки при його активації. Ключова ідея в тому, що ти можеш визначити різні налаштування для різних профілів, а Spring сам підбере потрібні конфігурації залежно від активного профілю.

Наприклад, якщо в тебе є профілі dev і prod, Spring може використовувати конфігурації одного з них залежно від того, який профіль активний.


Як задаються профілі?

У Spring Boot профілі можна вказати:

  1. У конфігураційних файлах.
  2. За допомогою параметрів командного рядка.
  3. Через змінні середовища.

Конфігурація профілів в Spring Boot

1. Використання application.properties і application.yml

Spring Boot використовує файли конфігурації для керування налаштуваннями застосунку. За замовчуванням це:

  • application.properties
  • application.yml

Додатково ти можеш створювати файли для конкретних профілів. Наприклад:

  • application-dev.properties (або .yml) — налаштування для профілю dev.
  • application-prod.properties (або .yml) — налаштування для профілю prod.

При запуску застосунку Spring автоматично вибере файл конфігурації, підходящий для активного профілю.

Приклад: application.yml


spring:
  profiles:
    active: dev

application-dev.yml


app:
  name: "MyApp (Development)"
datasource:
  url: "jdbc:h2:mem:devdb"
  username: "dev_user"
  password: "dev_password"

application-prod.yml


app:
  name: "MyApp (Production)"
datasource:
  url: "jdbc:mysql://prod.server:3306/proddb"
  username: "prod_user"
  password: "prod_password"

Коли активний профіль dev, Spring завантажить налаштування з файлу application-dev.yml. Якщо активний профіль prod, він візьме налаштування з application-prod.yml.

2. Перемикання профілів

Через application.properties

Якщо хочеш задати профіль за замовчуванням, просто додай його в файл application.properties:

spring.profiles.active=dev

Через командний рядок

Активувати профіль можна при запуску застосунку:


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

Через змінні середовища

Можна задати профіль за допомогою змінної середовища:


export SPRING_PROFILES_ACTIVE=prod

3. Використання анотації @Profile

Spring також дозволяє керувати профілями на рівні компонентів. За допомогою анотації @Profile можна вказати, у якому профілі повинен створюватися той чи інший bean.

Приклад:

Код конфігурації:


@Configuration
public class DataSourceConfig {

    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        // Налаштування для профілю dev
        return new HikariDataSource();
    }

    @Bean
    @Profile("prod")
    public DataSource prodDataSource() {
        // Налаштування для профілю prod
        return new HikariDataSource();
    }
}

Тепер Spring створить bean DataSource залежно від активного профілю.


Практика: реалізація профілів у Spring Boot додатку

1. Налаштування проєкту

Створи новий проєкт на Spring Initializr. Додай потрібні залежності, такі як:

  • Spring Boot Starter Web
  • Spring Boot Starter Data JPA
  • H2 Database

2. Додавання конфігураційних файлів

Створи три файли:

  1. application.yml — основний файл конфігурації.
  2. application-dev.yml — налаштування для розробки.
  3. application-prod.yml — налаштування для продакшена.

application.yml


spring:
  profiles:
    active: dev

application-dev.yml

app:
  name: MyApp (Dev)
server:
  port: 8080
datasource:
  url: jdbc:h2:mem:devdb
  username: dev_user
  password: password

application-prod.yml


app:
  name: MyApp (Prod)
server:
  port: 8081
datasource:
  url: jdbc:mysql://prod.server:3306/proddb
  username: prod_user
  password: prod_password

3. Використання профілів у коді

Зробимо контролер, який повертає поточне ім'я застосунку.

AppController.java


@RestController
@RequestMapping("/api")
public class AppController {

    @Value("${app.name}")
    private String appName;

    @GetMapping("/name")
    public String getAppName() {
        return appName; // Повертаємо ім'я застосунку, вказане в конфігурації
    }
}

4. Запуск застосунку

5. Запусти додаток з профілем dev:

java -jar myapp.jar --spring.profiles.active=dev

Перейдіть за адресою http://localhost:8080/api/name. Побачиш:

MyApp (Dev)

6. Запусти додаток з профілем prod:

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

Перейдіть за адресою http://localhost:8081/api/name. Результат:

MyApp (Prod)

Кращі практики: робота з профілями у великому проєкті

  1. Створюй мінімальні налаштування за замовчуванням. Наприклад, зберігай загальні параметри в application.yml, а унікальні — у файлах для профілів.
  2. Не зберігай паролі продакшена в коді. Для цього є секрети (наприклад HashiCorp Vault).
  3. Додай тестовий профіль. Це спростить тестування твого застосунку.

Приклад: application.yml


logging:
level: INFO

application-test.yml


logging:
  level: DEBUG
datasource:
  url: jdbc:h2:mem:testdb

Що робити, якщо щось пішло не так?

Часто початківці забувають активувати профіль. Це призводить до того, що Spring використовує конфігурацію за замовчуванням (application.yml). Щоб цього уникнути:

  • Завжди встановлюй профіль вручну, використовуючи параметр spring.profiles.active.
  • Перевіряй консольні логи — Spring завжди вказує, який профіль активний.

Ще одна проблема — перетин налаштувань. Якщо ти задав однакові параметри в різних файлах, Spring віддасть пріоритет активному профілю. Це легко забути, але, як знаєш, логування — твій кращий друг.


Офіційна документація Spring по профілям допоможе тобі поглибити знання.

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