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
- Propiedades con Environment Interface
- Propiedades con @Configuration Properties
- Profiles
- Usando CLI
- Usando JVM
- Environment Variables
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:
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.
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:
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:
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):
Si vemos, en nuestro sistema no tenemos la variable JAVA_HOME, por eso usamos la de OS:
Usamos Postman para validar el valor de OS que efectivamente es Windows NT:
Propiedades con Configuration Properties
Sobre el archivo de application.yml agregamos las siguientes propiedades bajo el sufijo de accounts:
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:
Es importante también colocar sobre la clase principal la anotación @EnableConfigurationProperties(value={AccountsContactInfoDto.class})
Creamos el método para ver los detalles:
Finalmente, hacemos la solicitud desde Postman:
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:
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 :
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 --:
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:
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:
Arrancamos la aplicación de nuevo y vemos el valor del build.version y deberemos ver el valor actualizado:
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:
Al hacer la validación de la aplicación ejecutándose, veremos que el valor ha cambiado:
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.