Как работают профили (Profiles) в Spring?

«Как работают профили (Profiles) в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Профили (Profiles) в Spring — это механизм условной регистрации бинов и конфигураций в зависимости от целевого окружения (development, test, production).

Объявление бина для конкретного профиля:

@Configuration
@Profile("dev") // Будет активен только при включённом профиле "dev"
public class DevDataSourceConfig {
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .build(); // H2 для разработки
    }
}

@Configuration
@Profile("prod")
public class ProdDataSourceConfig {
    @Bean
    public DataSource dataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:postgresql://prod-host/db");
        // ... настройка пула соединений для продакшена
        return new HikariDataSource(config);
    }
}

Способы активации профилей:

  1. В application.properties/application.yml:
    spring.profiles.active=dev,debug
  2. Переменная окружения или аргумент командной строки:
    java -jar app.jar --spring.profiles.active=prod
    export SPRING_PROFILES_ACTIVE=prod
  3. Программно:
    SpringApplication.setAdditionalProfiles("test");
  4. В тестах с помощью аннотации @ActiveProfiles("test").

Дополнительно: Можно использовать аннотацию @Profile на уровне метода @Bean. Профили могут быть отрицательными с использованием !, например, @Profile("!prod").