Configuración de Spring Boot usando YAML

1. Overview

Una de las formas de configurar aplicaciones Spring es utilizando archivos de configuración en formato YAML. En este tutorial rápido, aprenderemos a configurar diferentes perfiles para una simple aplicación Spring Boot utilizando YAML.

2. Archivo Spring YAML

Los perfiles de Spring ayudan a las aplicaciones Spring a definir diferentes propiedades para diferentes entornos. A continuación, veremos un archivo YAML simple que contiene dos perfiles. Los tres guiones que separan los dos perfiles indican el comienzo de un nuevo documento, por lo que se pueden describir todos los perfiles en el mismo archivo YAML.

La ruta relativa del archivo application.yml es /myApplication/src/main/resources/application.yml:

spring:
    config:
        activate:
            on-profile: test
name: test-YAML
environment: testing
enabled: false
servers: 
    - www.abc.test.com
    - www.xyz.test.com

---
spring:
    config:
        activate:
            on-profile: prod
name: prod-YAML
environment: production
enabled: true
servers: 
    - www.abc.com
    - www.xyz.com

Es importante notar que esta configuración no implica que ninguno de estos perfiles estará activo al iniciar la aplicación. Las propiedades definidas en los documentos específicos del perfil no se cargarán a menos que lo indiquemos explícitamente; por defecto, solo el perfil ‘default’ estará activo.

3. Enlazando YAML a una Clase de Cinfiguración

Para cargar un conjunto de propiedades relacionadas desde un archivo de propiedades, crearemos una clase de bean:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {
 
    private String name;
    private String environment;
    private boolean enabled;
    private List<String> servers = new ArrayList<>();

    // standard getters and setters
}

Las anotaciones utilizadas aquí son:

  • @Configuration – Marca la clase como una fuente de definiciones de beans.
  • @ConfigurationProperties – Vincula y valida las configuraciones externas a una clase de configuración.
  • @EnableConfigurationProperties – Esta anotación se usa para habilitar beans anotados con @ConfigurationProperties en la aplicación Spring.

4. Accediendo a las Propiedasde del YAML

Para acceder a las propiedades YAML, crearemos un objeto de la clase YAMLConfig y accedemos a las propiedades usando ese objeto. En el archivo de propiedades, estableceremos la variable de entorno spring.profiles.active en prod. Si no definimos esta propiedad, solo el perfil ‘default’ estará activo.

La ruta relativa para el archivo de propiedades es /myApplication/src/main/resources/application.properties:

spring.profiles.active=prod

En este ejemplo, mostraremos las propiedades utilizando el CommandLineRunner:

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private YAMLConfig myConfig;

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.run();
    }

    public void run(String... args) throws Exception {
        System.out.println("using environment: " + myConfig.getEnvironment());
        System.out.println("name: " + myConfig.getName());
        System.out.println("enabled: " + myConfig.isEnabled());
        System.out.println("servers: " + myConfig.getServers());
    }
}

La salida en la línea de comandos será:

using environment: production
name: prod-YAML
enabled: true
servers: [www.abc.com, www.xyz.com]

5. Sobreescribir la propiedad del YAML

En Spring Boot, los archivos YAML pueden ser sobreescritos por otros archivos de propiedades YAML. Antes de la versión 2.4.0, las propiedades YAML eran sobreescritas por archivos de propiedades según las siguientes ubicaciones, en orden de mayor a menor precedencia:

  • Propiedades de perfiles ubicadas fuera del jar empaquetado.
  • Propiedades de perfiles empaquetados dentro del jar.
  • Propiedades de aplicación ubicadas fuera del jar empaquetado.
  • Propiedades de aplicación empaquetadas dentro del jar.

A partir de Spring Boot 2.4, los archivos externos siempre sobreescriben los archivos empaquetados, independientemente de si son específicos de perfil o no.

6. Conclusión

En este breve artículo, aprendimos cómo configurar propiedades en aplicaciones Spring Boot utilizando YAML. También discutimos las reglas de sobreescritura de propiedades seguidas por Spring Boot para los archivos YAML.

Consejos Prácticos

  • Usa perfiles adecuados: Siempre define los perfiles que se ajusten a los diferentes entornos (producción, desarrollo, prueba) para evitar problemas de configuración en tiempo de ejecución.
  • Valida tus propiedades: Asegúrate de utilizar la validación proporcionada por la anotación @ConfigurationProperties para prevenir errores de configuración.
  • Documenta tus configuraciones: Mantén comentarios claros en tu archivo YAML para que sea fácil de entender para otros desarrolladores o para ti mismo en el futuro.
  • Utiliza valores predeterminados: Siempre que sea posible, establece valores predeterminados dentro de tu clase de configuración para manejar posibles casos de falta de datos.

Con estos consejos y esta guía, ahora estás mejor preparado para utilizar YAML para la configuración en tus aplicaciones Spring Boot. ¡Feliz programación en Java!