Skip to content

Latest commit

 

History

History
56 lines (36 loc) · 3.84 KB

Entrevista.md

File metadata and controls

56 lines (36 loc) · 3.84 KB
// entrevista

¿Cuál es la diferencia entre @Value y @ConfigurationProperties? @Value inyecta una propiedad individual — simple pero difícil de mantener con muchas propiedades. @ConfigurationProperties mapea un grupo de propiedades a un POJO: type-safe, soporta validación con @Validated, genera metadata para autocompletado IDE, y maneja conversión de tipos automáticamente (kebab-case → camelCase).


¿En qué orden tiene precedencia la configuración en Spring Boot? De mayor a menor: argumentos CLI (--prop=val), variables de entorno, application-{profile}.properties, application.properties, valores por defecto en @Value. Esto permite sobrescribir cualquier configuración en producción con variables de entorno sin tocar el código.


¿Cómo externalizas configuración sensible (passwords)? Nunca en application.properties en texto claro si se sube a git. Opciones: variables de entorno (${DB_PASSWORD}), secrets del sistema operativo, gestores de secretos (HashiCorp Vault, AWS Secrets Manager, Kubernetes Secrets). Spring Cloud Vault integra Vault directamente.


¿Qué diferencia hay entre application.properties y application.yml? Son equivalentes en capacidades — solo difieren en formato. YAML es más legible para configuraciones anidadas y admite listas de forma más natural. Properties es más simple y compatible con más herramientas. Spring Boot soporta ambos y puede coexistir (aunque es más claro usar uno solo).


¿Cómo pasas una propiedad por línea de comandos? java -jar app.jar --server.port=9090 --spring.datasource.url=jdbc:.... Spring Boot las procesa con la mayor precedencia. También puedes usar la notación de sistema Java: -Dserver.port=9090, aunque tiene menor precedencia que los argumentos de aplicación.


¿Qué es el relaxed binding en @ConfigurationProperties? El relaxed binding permite que la misma propiedad se defina con distintas convenciones de nombrado: max-pool-size, maxPoolSize, MAX_POOL_SIZE o max_pool_size se mapean todas al campo maxPoolSize del POJO. Esto facilita la configuración desde entornos distintos (ficheros YAML, variables de entorno del sistema operativo, argumentos de línea de comandos) sin cambiar el código. Con @Value no hay relaxed binding: el nombre debe coincidir exactamente.


¿Cómo validas las propiedades de configuración en tiempo de arranque? Añadiendo @Validated a la clase @ConfigurationProperties y anotaciones JSR-303 (@NotNull, @Min, @Max, @Pattern) sobre los campos. Si alguna propiedad no cumple las restricciones, Spring lanza una excepción en el arranque antes de que la aplicación empiece a atender peticiones. Esto convierte errores de configuración en fallos rápidos y explícitos en lugar de NullPointerExceptions en producción.