@Value y @PropertySource en Spring Boot

Clase 21 de 31Curso de Java: Backend con Spring Boot

Contenido del curso

JPA con Spring y Spring Data

Resumen

Gestionar la configuración de una aplicación Spring Boot de forma ordenada es fundamental para mantener un código limpio y profesional. Aprender a separar las propiedades en archivos independientes y a inyectarlas mediante anotaciones como @Value y @PropertySource te permite centralizar valores sensibles y reutilizarlos con facilidad.

¿Cómo crear un archivo de propiedades personalizado?

El primer paso consiste en crear un archivo nuevo dentro de la carpeta resources del proyecto. En este caso, se genera un archivo llamado connection.properties [0:18]. Dentro de él se definen las propiedades necesarias para la conexión a base de datos:

  • JDBC_URL: la cadena de conexión a la base de datos.
  • DRIVER: el driver específico que utilizará la aplicación.
  • USERNAME: el nombre de usuario, por ejemplo SA.
  • PASSWORD: la contraseña, que en este ejemplo queda vacía.

Estos valores se copian directamente desde la configuración que ya existía en application.properties o en la clase de configuración general [0:33]. De esta manera, las propiedades quedan aisladas en su propio archivo.

Nota importante: almacenar credenciales de base de datos directamente en archivos de propiedades dentro del proyecto no es una buena práctica en entornos productivos [1:07]. La recomendación profesional es utilizar variables de entorno para este tipo de datos sensibles.

¿Cómo habilitar propiedades externas con @PropertySource?

Una vez creado el archivo, es necesario indicarle a Spring dónde encontrarlo. Esto se logra con la anotación @PropertySource en la clase de configuración general [1:20]. Se coloca a nivel de clase y recibe como parámetro el classpath del archivo:

java @PropertySource("classpath:connection.properties")

Con esta línea, Spring carga automáticamente todas las propiedades definidas en connection.properties y las hace disponibles para su inyección.

¿Cómo inyectar valores con la anotación @Value?

Para acceder a cada propiedad individual, se utiliza la anotación @Value con la sintaxis ${nombrePropiedad} [1:38]. Cada propiedad se mapea a una variable de instancia dentro de la clase de configuración:

java @Value("${JDBC_URL}") private String jdbcUrl;

@Value("${DRIVER}") private String driver;

@Value("${USERNAME}") private String username;

@Value("${PASSWORD}") private String password;

Estas variables ya contienen los valores definidos en el archivo de propiedades y pueden utilizarse en cualquier bean o método de configuración.

¿Cómo integrar las variables en la configuración del DataSource?

Una vez declaradas las variables, se reemplazan los valores literales por las referencias a estas variables dentro del método que configura el DataSource [2:17]:

  • El URL se reemplaza por jdbcUrl.
  • El driver se reemplaza por driver.
  • El username se reemplaza por username.
  • El password se reemplaza por password.

Al reiniciar la aplicación [2:33], todo funciona correctamente: los usuarios se imprimen, los registros se almacenan en base de datos y la conexión opera sin errores.

¿Cuándo usar variables de entorno en lugar de archivos de propiedades?

Si bien el enfoque presentado es útil para comprender el mecanismo de inyección de propiedades, en proyectos reales se recomienda usar variables de entorno para datos de conexión a bases de datos [2:55]. Esto evita exponer credenciales en el código fuente y facilita la portabilidad entre diferentes ambientes como desarrollo, pruebas y producción.

El flujo completo para trabajar con propiedades personalizadas se resume así:

  • Crear el archivo .properties en resources.
  • Registrarlo con @PropertySource indicando el classpath.
  • Inyectar cada valor con @Value y la expresión ${}.
  • Usar las variables inyectadas en la configuración de componentes.

Si te interesa profundizar en cómo Spring Data JPA ofrece alternativas para consultas, el siguiente tema a explorar son los query methods, una funcionalidad que brinda JPA Repository para simplificar el acceso a datos. ¿Ya los has probado en tus proyectos? Comparte tu experiencia en los comentarios.