← Назад к вопросам

Как запустить приложение локально с несколькими профилями

1.3 Junior🔥 171 комментариев
#Spring Boot и Spring Data#Spring Framework

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Запуск приложения локально с несколькими профилями

В Spring Boot существует мощный механизм профилей (profiles), который позволяет иметь разные конфигурации для разных окружений (dev, test, prod). Рассмотрю несколько способов запуска с несколькими активными профилями.

1. Через VM параметры (IDE)

Если запускаешь приложение из IDE (IntelliJ IDEA, Eclipse):

-Dspring.profiles.active=dev,mysql,debug

Это активирует профили dev, mysql и debug одновременно.

В IntelliJ:

  • Run → Edit Configurations
  • VM options: -Dspring.profiles.active=dev,mysql
  • Apply → OK

2. Через application.yml

В основном файле конфигурации:

spring:
  profiles:
    active: dev,mysql
    include: debug,actuator
  • active — основные профили (переопределяют друг друга по приоритету)
  • include — дополнительные профили (добавляются к active)

3. Через переменные окружения

export SPRING_PROFILES_ACTIVE=dev,mysql,debug
java -jar application.jar

Или в одну строку:

SPRING_PROFILES_ACTIVE=dev,mysql java -jar app.jar

4. Через Maven

mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev,mysql"

Или в pom.xml:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <arguments>
            <argument>--spring.profiles.active=dev,mysql</argument>
        </arguments>
    </configuration>
</plugin>

5. Через Gradle

./gradlew bootRun --args="--spring.profiles.active=dev,mysql"

Или в build.gradle:

bootRun {
    args = ["--spring.profiles.active=dev,mysql"]
}

6. Структура конфиг файлов

Основные файлы должны быть в src/main/resources/:

application.yml              # основной (по умолчанию)
application-dev.yml          # dev профиль
application-test.yml         # test профиль
application-prod.yml         # prod профиль
application-mysql.yml        # mysql профиль
application-postgresql.yml   # postgresql профиль

Спринг автоматически загружает файлы, соответствующие активным профилям.

7. Проверка активных профилей в коде

@Component
public class ConfigDebugger {
    @Autowired
    private Environment env;
    
    @PostConstruct
    public void printProfiles() {
        String[] activeProfiles = env.getActiveProfiles();
        System.out.println("Active profiles: " + Arrays.toString(activeProfiles));
        System.out.println("Is dev? " + Arrays.asList(activeProfiles).contains("dev"));
    }
}

8. Условная инициализация бинов

@Configuration
@Profile("dev")
public class DevConfig {
    @Bean
    public DataSource devDataSource() {
        // dev database config
    }
}

@Configuration
@Profile("prod")
public class ProdConfig {
    @Bean
    public DataSource prodDataSource() {
        // production database config
    }
}

9. Полный пример с несколькими профилями

application.yml:

spring:
  application:
    name: my-app
  profiles:
    active: dev,mysql

application-dev.yml:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb_dev
    username: root
    password: dev_password
  jpa:
    hibernate:
      ddl-auto: create-drop

application-mysql.yml:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver

application-debug.yml:

logging:
  level:
    root: DEBUG
    org.springframework.web: TRACE

При запуске с профилями dev,mysql,debug будут загружены все три конфигурации в порядке приоритета.

10. Рекомендации

  1. Используй include для отключаемых фич — профили как debug, actuator лучше через include, чтобы они добавлялись к основным
  2. Тестирование — используй @SpringBootTest с webEnvironment = RANDOM_PORT и @TestPropertySource для переопределения
  3. CI/CD — задавай профили через переменные окружения на уровне pipeline
  4. Безопасность — никогда не коммить файлы с prod паролями, используй vault или переменные окружения

Этот подход обеспечивает гибкость и безопасность при разработке приложения на разных окружениях.