Propiedades y Profiles - nelsonortfan/MicroDockerSpringBoot GitHub Wiki

Propiedades y Profiles

En este documento, veremos las diferentes maneras de acceder a propiedades externas y hacer uso de los Profiles en una aplicación Spring Boot.

Propiedades con @Value Anotación

Comenzamos creando una nueva propiedad en el archivo application.yml del microservicio Accounts para saber la versión de nuestro build:

build version propiedad

Luego sobre la clase AccountsController debemos inyectar una variable tipo String que tomara este valor. Sobre ella colocar la anotación @Value("${build.version}") y luego creamos un método tipo GET que devuelva este valor.

anotacion value en el controller

metodo get para obtener build version

En el código se modifica el constructor del Controller para que no tome la variable que hemos creado. Si se tiene mas de 1 constructor en la clase, se debe agregar específicamente la anotación @Autowired sobre el constructor que queremos inyectar, en caso contrario no es necesario.

Desde Postman se hace la validación y se ve el valor leído:

Propiedad postman con value

Propiedades con Environment Interface

Con esta aproximación, usamos la variable Environment de la libreria org.springframework.core.env.Environment para poder leer las variables del Sistema. Inyectamos una variable de este tipo:

Variable Enviroment

Agregamos un método para retornar la variable. Podemos retornar otra variable como por ejemplo OS (la cual comentamos en el código por ahora):

metodo java version

Si vemos, en nuestro sistema no tenemos la variable JAVA_HOME, por eso usamos la de OS:

Variable de ambiente sistema OS

Usamos Postman para validar el valor de OS que efectivamente es Windows NT:

postman variable ambiente OS

Propiedades con Configuration Properties

Sobre el archivo de application.yml agregamos las siguientes propiedades bajo el sufijo de accounts:

configuration properties en el yml

Luego, creamos sobre el paquete de DTO un Record con los campos necesarios para que hagan el match con los campos definidos en el archivo yml:

Record contactdetails

Es importante también colocar sobre la clase principal la anotación @EnableConfigurationProperties(value={AccountsContactInfoDto.class})

Creamos el método para ver los detalles:

Metodo contact details

Finalmente, hacemos la solicitud desde Postman:

Propiedad con ConfigurationProperties

Profiles

Empezamos creando 2 archivos yml similares al que tenemos por default, con la diferencia que cada uno en su nombre tendrá el nombre del profile a usar:

Archivos_profiles

Y en el archivo que teniamos inicial, agregamos los siguientes parámetros para hacer referencia a ellos y activar el Profile de QA con la opción spring.profiles.active=qa :

modificacion archivo yml para agregando profiles

Si arrancáramos la aplicación, veríamos los datos del archivo del Profile QA en Contact Details y en el build.version.

Adicional a esto, podemos activar el Profile y modificar los parámetros# externos por medio de las siguientes 3 formas:

Usando CLI

Para esta opción, en las opciones de ejecución del programa, buscamos la pestaña de Program Arguments y colocamos el Profile a activar y el valor de la variable a modificar precedido del valor --:

CLI opciones

Ejecutamos la aplicacion y veremos que el build.value toma un valor diferente al igual que el Contact Details tiene el que posee el Profile prod:

version profile prd

contact_info-prd

Usando JVM

Para esta opción agregamos la opción de VM options y los parámetros que pasamos deben ser precedidos por la combinación -D, de esta manera pasamos lo siguiente:

VM options pforile

Arrancamos la aplicación de nuevo y vemos el valor del build.version y deberemos ver el valor actualizado:

build version VM

Environment Variables

Con esta opción, convertimos las propiedades a Variables de Ambiente. Se pasan las letras a mayúsculas y donde hayan puntos se pasan underscores. Por ejemplo la propiedad build.version seria BUILD_VERSION:

environment variables parte 1

environment variables parte 2

Al hacer la validación de la aplicación ejecutándose, veremos que el valor ha cambiado:

build version env variables

Ahora bien, si se tienen todas las opciones al mismo como se ve a continuación, se tomara por default la de CLI. Si no estuviera la del CLI se tomaría entonces la JVM Options. Finalmente la que menos tiene prioridad seria la de las Variables de Ambiente.

3 profiles al tiempo 3 tecnicas