• Giovanny Rey Cediel

Configuración de Propiedades Personalizadas en Spring Boot

Actualizado: ago 5

Spring Boot proporciona varias maneras para enlazar propiedades personalizadas en una aplicación, a continuación exploraremos algunas de ellas.

Supongamos que en el archivo application.properties tenemos las siguientes entradas:

Una manera de enlazar estos valores en nuestra aplicación es usando el decorador @Value(“$propiedad”)

Aunque el decorador @Value(“$propiedad”) es una forma valida de enlazar propiedades, resulta tedioso de usar cuando tenemos muchas propiedades que enlazar. Pensando en esto Spring Boot provee otro enfoque para el manejo de propiedades, mediante el uso de los decoradores @Configuration y @ConfigurationProperties.


Pero antes de usar estos decoradores es conveniente agregar al proyecto la dependencia spring-boot-configuration-processor.

Esta librería genera metadatos sobre las clases decoradas con @ConfigurationProperties, los cuales son usados por entornos de desarrollo como Eclipse, IntelliJ o NetBeans para propósitos de auto-completado cuando se edita el archivo application.properties (o.yml).


Para comprender el uso de @Configuration y @ConfigurationProperties vamos a suponer que tenemos los siguientes parámetros personalizados en nuestro archivo application.properties.

Ahora vamos a suponer que tenemos la necesidad de acceder a las propiedades marcadas como DATOS GENERALES. ¿Cómo podemos hacer esto sin usar @Value(…)?. Primero Vamos a crear una clase encapsulando los atributos codeApp y description, luego la decoramos con @Configuration y @ConfigurationProperties.

@Configuration lo usamos para poder inyectar la clase con @Autowired ya que internamente posee las características de @Component y a demás —aunque no es alcance de este post–, lo podemos usar para crear métodos decorados con @Bean —más detalles en el post Inversión de Control en Spring Boot—, los cuales generan objetos cuyo ciclo de vida y contexto es manejado por el contenedor IoC de Spring. El decorador @ConfigurationProperties lo usamos para extraer propiedades de nuestro archivo applications.properties. Y eso es todo, ahora podemos tener acceso a las propiedades generales inyectando la clase donde deseemos, inclusive en una clase de pruebas, como se muestra a continuación:

Ahora supongamos que queremos acceder las propiedades agrupadas por un prefijo, como es el caso de las propiedades e-mail de nuestro archivo application.properties definido arriba. Para hacer esto creamos la clase PropiedadesCorreo encapsulando en ella las propiedades de e-mail, luego la decoramos con @Configuration y con @ConfigurationProperties pero a este último le añadimos el campo prefix igualándolo al valor e-mail.

De esta manera podemos tener acceso a nuestras propiedades personalizadas inyectando la clase donde deseemos. A medida que fluye el desarrollo es muy posible que nuestro archivo application.properties crezca. En este caso es conveniente crear nuestros propios archivos de propiedades separados del application.properties. Siguiendo con nuestro ejemplo, supongamos que deseamos separar el grupo de propiedades e-mail. Para ello, primero creamos un archivo llamado email.properties, y en este, emplazamos las propiedades de correo:

Luego decoramos nuestra clase con @PropertySource("classpath:email.properties”). De esta manera le decimos a Spring que busque en el classpath del proyecto el archivo email.properties, para que de este obtenga las propiedades.

Hasta aquí, hemos aprendido como enlazar propiedades personalizadas con ayuda del decorador @Value. También vimos como optimizar este proceso con @ConfigurationProperties, y finalmente aprendimos también como enlazar una archivo de propiedades diferente al application.properties con el decorador @PropertySource.


Copyright Giovynet.com 2018 - 2020