Карта / Spring Boot / Профили

Профили

Профиль — набор настроек под конкретное окружение (локальная разработка, тест, продакшен) — без профилей пришлось бы вручную менять application.yml каждый раз при деплое в другое окружение.

# application-dev.yml — для локальной разработки
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb_dev
logging:
  level:
    root: DEBUG

# application-prod.yml — для продакшена
spring:
  datasource:
    url: ${DATABASE_URL}
logging:
  level:
    root: WARN

Активируется через переменную окружения или параметр запуска:

java -jar app.jar --spring.profiles.active=prod
Копнуть глубже

Базовый application.yml + профильный файл объединяются. Общие настройки, одинаковые для всех окружений, держат в application.yml, а профильный файл (application-dev.yml) только переопределяет или добавляет то, что отличается — не нужно дублировать всё подряд.

@Profile на бинах — можно создавать разные бины для разных профилей:

@Service
@Profile("dev")
class FakeEmailService implements EmailService { ... }   // в dev — не отправляет реально

@Service
@Profile("prod")
class RealEmailService implements EmailService { ... }   // в prod — отправляет по-настоящему

Это удобно для имитации внешних сервисов (платёжных систем, email) в локальной разработке, не задевая реальные системы.

🎤 Закрыл тему, если можешь объяснить:
• зачем нужны профили и как их активировать;
• как `@Profile` на бине позволяет подменять реализацию по окружению (если дошёл до 2-го слоя).