Properties Spring Boot

La importancia de los archivos de propiedades en las aplicaciones Spring Boot radica en su capacidad de proporcionar una ubicación centralizada para almacenar los ajustes de configuración. Al externalizar estas configuraciones en archivos properties Spring Boot, pueden ser modificarlas y administrarlas fácilmente sin tener que realizar cambios en el código fuente de la aplicación.

En un proyecto Spring Boot, los archivos de propiedades se pueden crear en diferentes formatos, como «.properties» o «.yml«. El formato «.properties» utiliza una estructura simple de pares clave-valor, mientras que el formato «.yml» permite una representación más jerárquica y estructurada de las propiedades.

Carga del archivo properties

Esta sección explora el proceso de incorporación de archivos de propiedades para externalizar la configuración, lo que permite una mayor flexibilidad y personalización en las aplicaciones Spring Boot. Cubre los métodos para cargar archivos de propiedades y cómo se pueden utilizar para administrar la configuración de la aplicación de manera efectiva.

Carga automática del archivo application.properties

En las aplicaciones Spring Boot, el archivo de propiedades predeterminado, application.properties, se carga automáticamente al inicio. Este archivo sirve como depósito central para la configuración de la aplicación y alberga pares clave-valor que definen varias configuraciones. Normalmente ubicado en el directorio src/main/resources, proporciona una manera sencilla de administrar las propiedades de configuración. La anotación @Value permite un fácil acceso a estas propiedades dentro del código de la aplicación.

properties-spring-boot

Carga de archivos properties adicionales

Si necesita cargar un archivo de propiedades diferente puede hacerlo explícitamente usando la anotación @PropertySource.

@Service
@PropertySource("classpath:connection.properties")
public class UserService {
	
	@Value("${broker}")
	private String broker;
	
    //getter, setter & other methods...

}

Si tenemos varios archivos de propiedades, podemos cargarlos explícitamente usando la anotación @PropertySources para especificar esos archivos de propiedades.

@Service
@PropertySources({
    @PropertySource("classpath:jms.properties"),
    @PropertySource("classpath:rest.properties")
})public class UserService {
	
	@Value("${broker}")
	private String broker;
	
}

En los ejemplos anteriores no es necesario cargar explícitamente el archivo application.properties, ya que se seguirá cargando automáticamente.

Tener en cuenta que los valores en los archivos properties agregados explícitamente (jms.properties y rest.properties en el ejemplo) tienen precedencia sobre los valores en el archivo application.properties en caso de conflicto con los nombres de las properties.

Inyectar valores de propiedad a variables

La anotación @Value en Spring Boot permite la inicialización de variables miembro con expresiones de valor predeterminado desde archivos de propiedades a nivel de variable, método o parámetro de constructor. Al utilizar @Value(«{property.name}»), puede anotar variables miembro de una clase de componente Spring, lo que permite un fácil acceso a las propiedades.

@Service
public class UserService {
	
	@Value("${broker}")
	private String broker;
	
    //getter, setter & other methods...

}

Inyectar valores de propiedad a un conjunto de variables

La anotación @ConfigurationProperties en Spring Boot se emplea para vincular variables miembro en un bean con valores de propiedad definidos en un archivo de propiedades. Simplifica el proceso de vinculación llamando a métodos setter en la clase anotada. Esta anotación agiliza la configuración de propiedades, mejorando la gestión de las configuraciones de aplicaciones en Spring. Además, proporciona una manera conveniente de agrupar propiedades relacionadas bajo un prefijo común para una mejor organización.

Veamos un ejemplo. Supongamos que tenemos un archivo connection.properties con valores de configuración de conexiones JMS y Rest:

# JMS Configuration
spring.activemq.broker=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=secret

# REST Client Configuration
restclient.base.url=https://api.example.com
restclient.connect.timeout=5000
restclient.read.timeout=10000
restclient.max.connections=20
restclient.retry.enabled=true

Para este ejemplo nos interesa usar los valores de configuración de JMS, para lo cual:

  1. Cargamos el archivo de modo explícito usando @PropertySource debido a que vamos a utilizar valores en un archivo properties personalizado (connection.properties) y no del archivo properties estándar (application.properties).
  2. Para leer solo las propiedades JMS hacemos uso de la anotación @ConfigurationProperties con el parámetro prefix, lo que nos permite filtrar propiedades de archivo en base a su prefijo (en este caso «spring.activemq»).
  3. En el bean, declaramos las variables miembro necesarias con sus getter/setter correspondientes. Los nombres de las variables deben coincidir con los nombres de las propiedades del archivo properties (excluyendo el prefijo antes mencionado).
@Service
@PropertySource("classpath:connection.properties")
@ConfigurationProperties(prefix = "spring.activemq")
public class UserService {
	
	private String broker;
	private String user;
	private String password;

    //getters, setters & other methods...

}

Conclusión

Este artículo ha proporcionado una descripción general del uso de archivos de propiedades en aplicaciones Spring Boot. Ha cubierto varios métodos para cargar archivos de propiedades, incluida la carga automática y el uso de anotaciones @PropertySource y/o @PropertySources. Además, el artículo profundizó en la aplicación práctica de inyectar valores en beans utilizando las anotaciones @Value y @ConfigurationProperties. Al comprender e implementar estas técnicas, los desarrolladores pueden administrar y utilizar de manera efectiva archivos de propiedades para mejorar la configuración de sus aplicaciones Spring Boot.


Te puede interesar