Los perfiles de Spring Boot permiten tener configuraciones distintas para distintos entornos (dev, test, prod) activadas dinámicamente, sin cambiar el código ni recompilar.
src/main/resources/
├── application.yml ← configuración base (todos los entornos)
├── application-dev.yml ← sobrescribe para dev
├── application-test.yml ← sobrescribe para test
└── application-prod.yml ← sobrescribe para producción
La configuración específica del perfil activo sobrescribe la base.
Activar un perfil:
# Variable de entorno
SPRING_PROFILES_ACTIVE=prod java -jar app.jar
# Argumento de línea de comandos
java -jar app.jar --spring.profiles.active=prod
# application.properties
spring.profiles.active=dev@Profile en beans:
@Bean
@Profile("dev")
public DataSource h2DataSource() { ... } // solo activo en dev
@Bean
@Profile("!dev") // activo en todo excepto dev
public DataSource postgresDataSource() { ... }
@Bean
@Profile({"qa", "staging"}) // activo en qa O staging
public DataSource qaDataSource() { ... }En tests:
@SpringBootTest
@ActiveProfiles("test")
class MiServicioTest { ... }Varios perfiles simultáneos:
spring.profiles.active=base,cloud,prod — los perfiles se acumulan y el último tiene mayor precedencia.
- Un único artefacto para todos los entornos.
- Configuración de entorno sin modificar el código.
@ActiveProfilesen tests para configuración específica de testing.- Soporte para perfiles anidados y acumulativos.
Ver ExpPerfiles.java, ExpConditionalOnProfile.java, ExpProfileGroups.java y ExpEnvironmentAbstraction.java para ejemplos ejecutables con @Profile, activación de perfiles y configuración por entorno.