Как запустить приложение локально с несколькими профилями
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Запуск приложения локально с несколькими профилями
В 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. Рекомендации
- Используй include для отключаемых фич — профили как
debug,actuatorлучше черезinclude, чтобы они добавлялись к основным - Тестирование — используй
@SpringBootTestсwebEnvironment = RANDOM_PORTи@TestPropertySourceдля переопределения - CI/CD — задавай профили через переменные окружения на уровне pipeline
- Безопасность — никогда не коммить файлы с prod паролями, используй vault или переменные окружения
Этот подход обеспечивает гибкость и безопасность при разработке приложения на разных окружениях.