¿Qué es una property?
Para explicar qué es property, primero hay que explicar qué es el entorno o environment, ya que cuando ejecutamos una aplicación, el entorno, es decir, lo que hay en torno a esa aplicación, es interesante.
El entorno lo conforman varios elementos, uno de ellos, por ejemplo, es el propio sistema operativo dónde se está ejecutando, que tendrá unas características determinadas. No es lo mismo ejecutar una aplicación Java para Windows o en Linux, ya que aunque desarrollaremos el mismo código, el entorno en el que se está ejecutando es diferente.
Algunos elementos pueden variar, por ejemplo, cómo se indica un path en Windows, el separador de directorios, no es el mismo que en Linux, con lo cual el entorno es algo distinto.
Las properties son un modo conveniente de proporcionar pares clave-valor que podremos utilizar desde nuestra propia aplicación. De hecho, lo que podemos definir mediante una property es una clave, a la que le asignaremos un valor, y en nuestra aplicación podemos usar esa clave.
Un ejemplo sería el separador de directorio que hemos comentado antes o incluso en algún tipo de internacionalización, dónde nosotros pintaríamos en nuestra plantilla el valor de la clave, que se podría fácilmente modificar o adaptar a distintos idiomas.
Podemos ubicar en nuestros proyectos de Spring el fichero de properties, es decir, el fichero donde guardamos todo estos pares clave-valor, que es de tipo textual, por ejemplo dentro de la carpeta de recursos /src/main/resources
.
Environment
Environment es también una clase, la cual podemos utilizar en nuestras aplicaciones, y que nos va a dar acceso a todo ese tipo de propiedades, ya sean variables de entorno del sistema operativo, aquellas otras variables que indiquemos en el fichero de properties, alguna propiedad de la máquina virtual de Java, etcétera. Esto se realiza a través de método getProperty
.
Spring nos permite inyectarla con autowire, de esta manera no nos tenemos que preocupar de cómo se carga, si depende de un sistema operativo u otro, etcétera.
Configuración vía XML
Para poder usar ficheros de properties
, existen diferentes maneras de configurarlos. Vamos a ver a continuación la configuración en XML y más adelante veremos la configuración con JavaConfig
.
Si queremos crear y utilizar un fichero de properties debemos crear un fichero de tipo texto dentro de la carpeta de recursos, y dentro de nuestro descriptor de Beans debemos crear un Bean de este tipo:
<beans>
<bean class=”org.springframework.beans
.factory.config
.PropertyPlaceholderConfigurer”>
<property name=”location” value=”ejemplo.properties” />
</bean>
<bean id=”saludator”
class=”com.openwebinars.spring.properties.Saludator”>
<property name=”mensaje” value=”${mensaje}” />
</bean>
</beans>
Esa clase es la que nos va a permitir cargar un fichero de properties. Cómo podemos cargar ese fichero, o el path, se indica mediante la property location, indicando el nombre del fichero que hemos creado en la carpeta de recursos.
Posteriormente, la forma de poder utilizar esa property es con la notación ${nombre.propiedad.elegida}
. En el ejemplo vemos que queremos inyectar ese valor de property en una propiedad textual de otro bean que hemos creado con el nombre de ejemplo.properties
.
Ejemplo práctico
En la carpeta resources tenemos creado el fichero ejemplo.properties
, y como hemos dicho antes, una property se describe mediante un par clave-valor. Dentro del archivo tenemos lo siguiente:
mensaje=¡Hola a todos!
Para poder utilizarlo en XML lo único que tenemos que hacer es cargar en el archivo beans.xml
la clase que es capaz de procesar un fichero de properties y permitirnos usarlo. Este archivo sería así:
<beans>
<bean class=”org.springframework.beans
.factory.config
.PropertyPlaceholderConfigurer”>
<property name=”location” value=”ejemplo.properties” />
</bean>
<bean id=”saludator”
class=”com.openwebinars.spring.properties.Saludator”>
<property name=”mensaje” value=”${mensaje}” />
</bean>
</beans>
Esa propiedad se inyecta dentro del valor correspondiente al String mensaje dentro del archivo Saludator.java
, que contiene lo siguiente:
package com.openwebinars.spring.properties;
public class Saludator {
private String mensaje;
public void setMensaje(String msg) {
}
public String getMensaje() {
return this.mensaje;
}
}
Esto nos va a permitir, cuando queramos imprimir ese mensaje por pantalla, que lo podamos hacer, ejecutando el archivo App.java
, cuyo contenido es el siguiente:
package com.openwebinars.spring.properties;
import org.springframework.context.ApplicationContext;
public class App {
public static void main(String [] args) {
ApplicationContext appContext = new ClassPathXmlApplicationContext(“beans.xml”)
Saludator saludator =appContext.getBean(Saludator.class);
System.out.println(saludator.getMensaje()));
((ClassPathXmlApplicationContext) appContext).close();
}
}
Si ejecutamos ese fichero comprobamos que se carga ese valor del fichero de properties y se ha impreso.
Configuración vía JavaConfig
(“classpath:ejemplo.properties”)
public class AppConfig {
Environment env;
public Saludator saludator () {
Saludator saludator = new Saludator();
saludator.setMensaje(env.getProperty(“mensaje”));
return saludator;
}
}
Si en lugar de utilizar la configuración XML quisiéramos utilizar JavaConfig, lo que tendríamos que hacer es, en alguna de nuestras clases de configuración donde lo queramos usar, utilizar la anotación
@PropertySource
, e indicar dentro en la ruta.
Si vamos a guardar ese fichero en la carpeta resources directamente sin crear ningún paquete dentro, podríamos utilizar la palabra classpath dentro de la ruta, para indicar que en la raíz del classpath se encuentra ese fichero de properties.
Podríamos utilizar también algunos otros mecanismos como @Value
, pero en el ejemplo optamos por auto inyectar la clase Environment, para que también podamos ver su uso.
Y a través del método getProperty
podríamos setear el valor de la propiedad mensaje para poder construir el Bean Saludator y poder utilizarlo y que tenga un comportamiento análogo al que hemos visto en el ejemplo anterior.
Guardamos el código anterior en un archivo llamado AppConfig.java
, y con el mismo vemos que en nuestra clase de configuración autoinyectamos nuestro entorno, y que utilizamos a través de getProperty
para capturar el valor de esa propiedad y setearlo como valor de este Bean. Si ejecutamos el archivo App.java comprobamos que también nos muestra nuestro mensaje de saludo.
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.