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 modificadas y administradas fácilmente sin tener que realizar cambios en el código fuente de la aplicación.
Spring Boot permite la configuración de aplicaciones mediante el uso de archivos de propiedades. Los dos formatos más comunes son:
- Archivos
.properties
: Son archivos de texto que siguen el formato clave-valor (key-value) para definir las propiedades. - Archivos
.yaml
: Utilizan el formato YAML (YAML Ain’t Markup Language), que es más estructurado y legible para configuraciones complejas.
Ambos formatos se utilizan para definir parámetros como URLs de bases de datos, configuraciones de servidor, y parámetros personalizados.
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.
1. 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.
2. 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.
3. Carga de archivo de propiedades específicas del entorno
Spring Boot soporta perfiles de configuración que permiten tener configuraciones específicas para diferentes entornos (desarrollo, producción, etc.). Para activar un perfil en Spring Boot, debes ajustar la configuración de tu aplicación para que lea los archivos de propiedades correspondientes.
3.1. Define los perfiles en los archivos de propiedades:
application-dev.properties
: Contendrá las configuraciones específicas para el perfil de desarrollo.application-prod.properties
: Contendrá las configuraciones específicas para el perfil de producción.
3.2. Configura el spring-boot-maven-plugin en tu pom.xml para establecer el perfil activo:
En el archivo pom.xml
, agrega o modifica la configuración del plugin spring-boot-maven-plugin
para incluir el perfil que deseas activar. Aquí tienes un ejemplo de cómo podrías configurar el plugin para activar el perfil de desarrollo (dev
):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<environmentVariables>
<spring.profiles.active>dev</spring.profiles.active>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
Cambia el valor de <value>
a prod
para activar el perfil de producción en lugar del de desarrollo.
El perfil activo se aplicará según lo especificado en el pom.xml
y Spring Boot cargará automáticamente el archivo de propiedades correspondiente (por ejemplo, application-dev.properties
para el perfil dev
).
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:
- 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).
- 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»).
- 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
En este artículo hemos proporcionado una descripción general del uso de archivos de propiedades en aplicaciones Spring Boot. Hemos 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, se profundizó en la aplicación práctica de inyectar valores en beans utilizando las anotaciones @Value y @ConfigurationProperties. Comprender e implementar estas técnicas permite administrar y utilizar de manera efectiva archivos de propiedades para mejorar la configuración de sus aplicaciones Spring Boot.
Te puede interesar
Introducción a Spring Boot
Este artículo es una introducción a Spring Boot en el que haremos un repaso de sus características más importantes.
Creación de una aplicación Spring Boot
El presente artículo abarca la creación de una aplicación Spring Boot elemental, usando la herramienta Spring Initializr.