Utilizar propiedades en Spring Boot

El problema

Necesitamos pasarle ciertos valores a nuestra aplicación o API para que funcione como esperamos.

Algunas soluciones

Una de las soluciones puede ser enviarle parámetros (--nombre=valor) durante la inicialización del JAR, de la siguiente manera:

$ java -jar cchido.jar --server.port=8765 --hola=mundo

O como propiedades del sistema:

$ java -Dserver.port=8765 -jar cchido.jar

De esta forma podemos tener el equivalente a esas mismas propiedades escritas en el archivo application.properties durante el tiempo de vida del JAR.

La segunda opción es escribir directamente sobre el archivo application.properties las variables que necesitemos. Supongamos un proyecto con el siguiente application.properties.

spring.datasource.url=jdbc:oracle:thin:@datacenter:0:jaimito
spring.datasource.username=chavo
spring.datasource.password=ocho
spring.datasource.driver.class=oracle.jdbc.OracleDriver
lista.correos = pak@codigochido.com,github@codigochido.com

pais.saludo=mexico

spring.jpa.hibernate.ddl-auto = validate
server.port=8010

Utilizar las variables que definimos

getProperty de la clase Environment

import javax.annotation.PostConstruct;
import org.springframework.core.env.Environment;

@Service
public class RecepcionServicioImplementación implements RecepcionServicio {
	
	@Autowired
    Environment enviroment;
	
	private String pais;
	
	@PostConstruct
	   public void init(){
		this.pais = enviroment.getProperty("pais.saludo");
	   }

	@Override
	public String saludar(){
		return "Viva "+this.pais;
	}

	...

anotación @Value

import org.springframework.beans.factory.annotation.Value;

@Service
public class NotificacionServicioImp implements NotificacionServicio {
	
	@Value("#{'${lista.correos}'.split(',')}")
	private List<String> destinatarios;

variables del sistema

export palabra=mundo

@Service
public class RecepcionServicioImplementación implements RecepcionServicio {
	
	@Autowired
    Environment enviroment;
	
	private String palabra;
	
	@PostConstruct
	   public void init(){
		this.palabra = enviroment.getProperty("palabra");
	   }

Este fue un post muy sencillo pero pienso que muchas de nuestras aplicaciones necesitan resolver el problema que abordamos hoy.

Viva México!!

comments powered by Disqus