Gymterview
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") не будут созданы, если профиль не активирован.