Acceso a propiedades de configuración desde application.yml en aplicaciones Spring con Java

En el ecosistema de Spring, leer propiedades del archivo de confgiuración application.yml es una tarea habitual. A continuación se detallan tres efnoques comunes para lograrlo.

Primer enfoque: Inyección mediante la anotación @Value

Este método utiliza la anotación @Value para asignar valores directamente a campos de la aplicación.

Sintaxis básica

@Value("${clave.en.yml:valor.por.defecto}")
@Value("${clave.en.yml}")

Implementación directa en una clase

import org.springframework.beans.factory.annotation.Value;

public class ServicioEjemplo {
    @Value("${app.entorno.nombre}")
    private String entornoActual;
    @Value("${app.tiempo.espera:5000}")
    private long tiempoEspera;

    public void mostrarConfiguracion() {
        System.out.println("Entorno: " + entornoActual);
        System.out.println("Timeout configurado: " + tiempoEspera);
    }
}

Uso dentro de una clase de configuración con @Bean

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConfiguracionEntorno {

    @Value("${app.sistema.regional}")
    private String region;
    @Value("${app.sistema.idioma}")
    private String idioma;

    @Bean
    public ConfigSistema crearConfigSistema() {
        ConfigSistema config = new ConfigSistema();
        config.setRegion(region);
        config.setIdioma(idioma);
        return config;
    }
}

Segundo enfoque: Vinculación con @ConfigurationProperties

Esta estrategia enlaza un bloque de propiedades del YAML a un POJO, facilitando su gestión.

Puntos clave a considerar:

  • La clase debe anotarse con @Configuration y @ConfigurationProperties.
  • Es necesario proveer métodos de acceso (getters y setters) para cada propiedad.
  • La inyección puede no funcionar correctamente en ciertos beans como controladores; se recomienda su uso en servicios o componentes de lógica.
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "app.base.datos")
public class ConfiguracionBaseDatos {

    private String rutaConexion;
    private String usuario;
    private String clave;

    public String getRutaConexion() {
        return rutaConexion;
    }

    public void setRutaConexion(String rutaConexion) {
        this.rutaConexion = rutaConexion;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
}

Tercer enfoque: Consulta mediante Environment

El objeto Environment actúa como un contenedor centralizado para todas las propiedades del contexto de Spring.

import org.springframework.core.env.Environment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class LectorPropiedades {

    @Autowired
    private Environment entorno;

    public void verificarPropiedades() {
        String puerto = entorno.getProperty("app.puerto", "8080");
        String nombreApp = entorno.getProperty("app.nombre");
        System.out.println("Puerto activo: " + puerto);
        System.out.println("Nombre de la aplicación: " + nombreApp);
    }
}

Etiquetas: Spring Boot java application.yml @Value @ConfigurationProperties

Publicado el 7-10 01:00