Короткий ответ
Профили (Profiles) — механизм Spring, позволяющий поддерживать разные конфигурации приложения для разных окружений: разработки (dev), тестирования (test) и продакшена (prod). Бин или класс конфигурации, помеченный @Profile, загружается только тогда, когда соответствующий профиль активирован.
Как это работает подробнее
Профили разделяют окружение-специфичные настройки: URL базы данных, уровень логирования, параметры интеграций. Это избавляет от ручного изменения конфигурации при переходе между окружениями и помогает защитить продакшен-настройки. Для отдельных профилей создаются файлы вида application-{profile}.properties или application-{profile}.yml, которые переопределяют общие настройки.
- Способы активации профиля: свойство
spring.profiles.active=prodвapplication.properties, аргумент командной строки--spring.profiles.active=prodили переменная окруженияSPRING_PROFILES_ACTIVE. - Основной файл конфигурации Spring Boot —
application.properties: порт сервера (server.port), подключение к базе данных, логирование, пользовательские свойства. - Формат YAML: вместо properties можно использовать
application.yml, который поддерживает иерархическую структуру настроек.
Пример кода
application.yml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/dbЧто использовать на практике
- Делите конфигурацию по профилям dev, test, prod и задавайте активный профиль через переменную окружения или аргумент запуска.
- Общие настройки храните в
application.yml, а специфичные для окружения — в файлахapplication-{profile}.yml. - Чувствительные данные (пароли, ключи) держите вне кода — в переменных окружения.
Подводные камни
- Не храните настройки всех окружений в одном файле с ручным переключением — используйте профили.
- Профиль должен быть активирован до создания контекста, иначе помеченные
@Profileбины не загрузятся. - Не путайте активацию профиля (
spring.profiles.active) и файлы-носители настроекapplication-{profile}.*.
Как отвечать на собеседовании
- Объясните назначение профилей: разные конфигурации для разных окружений → назовите способы активации: spring.profiles.active, аргумент командной строки, SPRING_PROFILES_ACTIVE → опишите файлы: общий application.yml и переопределяющие его application-{profile}.yml → приведите пример: dev-база и prod-база в разных профилях.