Профили
Профиль — набор настроек под конкретное окружение (локальная разработка, тест, продакшен) — без профилей пришлось бы вручную менять 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-го слоя).
• как `@Profile` на бине позволяет подменять реализацию по окружению (если дошёл до 2-го слоя).