Los perfiles de Spring brindan la capacidad de separar partes de la configuración de su aplicación y hacerlas accesibles solo en ciertos entornos. Cualquier @Component, @Configuration o @ConfigurationProperties se puede marcar con una anotación @Profile para restringir la carga, como se muestra en el siguiente ejemplo:

Java
importar org.springframework.context.annotation.Configuration;
importar org.springframework.context.annotation.Profile;
@Configuration(proxyBeanMethods = false)
@Profile("producción")
configuración de producción de clase pública {
    //...
}
Kotlin
importar org.springframework.context.annotation.Configuration
importar org.springframework.context.annotation.Profile
@Configuration(proxyBeanMethods = false)
@Profile("producción")
clase Configuración de producción {
    //...
}
Si los beans con la anotación @ConfigurationProperties se registran a través de la anotación @EnableConfigurationProperties en lugar de escanear automáticamente, el annotation @Profile debe establecerse en una clase marcada con la anotación @Configuration que contiene la anotación @EnableConfigurationProperties. En caso de que se analicen las anotaciones @ConfigurationProperties, la anotación @Profile se puede especificar para la clase misma, marcada con la anotación @ConfigurationProperties.

Puede utilizar la propiedad spring.profiles.active para Environment para especificar qué perfiles están activos. La propiedad se puede establecer de cualquiera de las formas descritas anteriormente en este capítulo. Por ejemplo, puede incluirlo como parte del archivo application.properties, como se muestra en el siguiente ejemplo:

Propiedades
spring.profiles.active=dev,hsqldb
Yaml
primavera:
  perfiles:
    activo: "dev,hsqldb"

También puede configurarlo en la línea de comando usando el siguiente parámetro: --spring.profiles.active=dev,hsqldb.

Si no hay ningún perfil activo, se activará el perfil predeterminado. El nombre del perfil predeterminado es default y se puede ajustar utilizando la propiedad spring.profiles.default para Environment, como se muestra en el siguiente ejemplo. :

Propiedades
spring.profiles.default=none
Yaml
primavera:
  perfiles:
    predeterminado: "ninguno"

spring.profiles.active y spring.profiles.default solo se pueden utilizar en documentos que no sean de perfil. Esto significa que no se pueden incluir en archivos o documentos específicos del perfil activados usando spring.config.activate.on-profile.

Por ejemplo, la configuración del segundo documento no es válida:

Propiedades
# este documento es válido
spring.profiles.active=prod
#---
# este documento no es válido
spring.config.activate.on-profile=prod
spring.profiles.active=métricas
Yaml
# este documento es válido
primavera:
  perfiles:
    activo: "prod"
---
# este documento no es válido
primavera:
  configuración:
    activar:
      en el perfil: "prod"
  perfiles:
    activo: "métricas"

Añadir perfiles activos

La propiedad spring.profiles.active sigue las mismas reglas de ordenamiento que otras propiedades: la que tiene el PropertySource más alto tiene la mayor prioridad. Esto significa que puede configurar perfiles activos en application.properties y luego reemplazarlos usando un modificador de línea de comando.

A veces es útil tener propiedades que se agreguen a los perfiles activos en lugar de reemplazarlos. La propiedad spring.profiles.include se puede utilizar para agregar perfiles activos además de los habilitados por la propiedad spring.profiles.active. El punto de entrada SpringApplication también tiene una API de Java para instalar perfiles adicionales. Consulte el método setAdditionalProfiles() en la sección sobre SpringApplication.

Por ejemplo, si una aplicación se ejecuta con las siguientes propiedades, los perfiles público y local se activarán, incluso si se ejecuta utilizando el modificador --spring.profiles.active:

Propiedades
spring.profiles.include[0]=común
spring.profiles.include[1]=local
Yaml
primavera:
  perfiles:
    incluir:
      - "común"
      - "local"
Al igual que spring.profiles.active, spring.profiles.include solo se puede usar en documentos, no relacionado con el perfil. Esto significa que no se puede incluir en archivos o documentos específicos del perfil activados usando spring.config.activate.on-profile.

Grupos de perfiles

A veces, los perfiles que se definen y utilizan en una aplicación son demasiado detallados y resultan engorrosos de usar. Por ejemplo, puede haber perfiles proddb y prodmq, que se utilizan para habilitar de forma independiente la funcionalidad de mensajería y base de datos.

La función Spring Boot ayuda con esto, que le permite definir grupos de perfiles. Un grupo de perfiles le permite definir un nombre lógico para un grupo de perfiles asociado.

Por ejemplo, podemos crear un grupo production que consta de nuestros perfiles proddb y prodmq.

Propiedades
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
Yaml
primavera:
  perfiles:
    grupo:
      producción:
      - "prodb"
      - "prodmq"

La aplicación ahora se puede iniciar usando --spring.profiles.active=production para activar production, proddb y perfiles prodmq a la vez.

Programa de instalación de perfiles

Puede configurar perfiles activos mediante programación llamando a SpringApplication.setAdditionalProfiles(…​) antes de ejecutar la aplicación. También puede activar perfiles utilizando la interfaz ConfigurableEnvironment de Spring.

Archivos de configuración asociados a un perfil específico

Las opciones específicas del perfil tanto para application.properties (o application.yml) como para los archivos a los que se hace referencia mediante la anotación @ConfigurationProperties se cuentan como archivos y descargados.