junior
Что такое профили в Spring? Как работает аннотация @Profile?
Профили (Profiles) – механизм Spring для условной регистрации бинов в зависимости от активного окружения (dev, test, prod). Позволяет иметь разные конфигурации без изменения кода.
Пример
@Configuration
@Profile("dev")
public class DevDataSourceConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2).build();
}
}
@Configuration
@Profile("prod")
public class ProdDataSourceConfig {
@Bean
public DataSource dataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:postgresql://prod-server:5432/mydb");
return ds;
}
}
Способы активации профиля
Пример
# 1. В application.properties
spring.profiles.active=dev
# 2. Аргумент командной строки
# java -jar app.jar --spring.profiles.active=prod
# 3. Переменная окружения
# SPRING_PROFILES_ACTIVE=prod
Пример
// 4. В тестах
@ActiveProfiles("test")
@SpringBootTest
public class MyServiceTest { }
Файлы свойств для профилей (Spring Boot)
Пример
application.properties // общие свойства
application-dev.properties // свойства для профиля dev
application-prod.properties // свойства для профиля prod
Свойства из файла профиля перезаписывают значения из общего application.properties.
Логические операторы в профилях (Spring 5.1+)
Пример
@Profile("dev & local") // И
@Profile("dev | staging") // ИЛИ
@Profile("!prod") // НЕ
На собеседовании: важно показать знание способов активации и приоритета файлов свойств. Частая ошибка – забыть активировать профиль: бины с
@Profile("dev")не будут созданы, если профиль не активирован.