Skip to content

Latest commit

 

History

History

23-Spring-Boot-Config

// concepto

Spring Boot externaliza la configuración en ficheros de propiedades, variables de entorno o argumentos de línea de comandos. El objetivo: el mismo artefacto (JAR) funciona en cualquier entorno cambiando solo la configuración.

# application.yml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/midb
    username: ${DB_USER}
    password: ${DB_PASS}
app:
  config:
    timeout: 30
    retry-count: 3
// key features

Fuentes de configuración por orden de precedencia (mayor a menor):

  1. Argumentos de línea de comandos (--server.port=9090)
  2. Variables de entorno (SPRING_DATASOURCE_URL)
  3. application-{profile}.properties
  4. application.properties / application.yml
  5. Valores por defecto en @Value

@Value vs @ConfigurationProperties:

// @Value — propiedad individual
@Value("${app.config.timeout}")
private int timeout;

// @ConfigurationProperties — grupo de propiedades (recomendado)
@ConfigurationProperties(prefix = "app.config")
@Component
public class AppConfig {
    private int timeout;
    private int retryCount;  // app.config.retry-count → camelCase automático
    // getters y setters...
}

@ConfigurationProperties es preferible para grupos de propiedades: validación con @Validated, autocompletado en IDEs y mapeo tipo-seguro.

// ventajas
  • Configuración sin recompilar: cambia el entorno cambiando propiedades.
  • @ConfigurationProperties con validación (@NotNull, @Min) para configuración robusta.
  • Variables de entorno y CLI args tienen mayor precedencia — útil para override en producción.
  • Spring Cloud Config y Vault para configuración centralizada y secreta en microservicios.

Ver ExpConfig.java, ExpPropertiesBinding.java, ExpEnvironment.java y ExpValidation.java para ejemplos ejecutables con @ConfigurationProperties, @Value, validación y fuentes de configuración por precedencia.