Usando la variable env en la aplicación Spring Boot.

Estamos trabajando en unSpring Boot aplicación web y la base de datos que estamos usando esMySql;

la configuración que tenemos es que primero lo probamosen la zona (significa que necesitamos instalar MySql en nuestra PC);

entonces empujamos aBitbucket;

Jenkins detecta automáticamente el nuevo impulso a Bitbucket y lo construye (para que pase Jenkins mvn build también necesitamos instalar MySql en las máquinas virtuales que ejecutan Jenkins).

Si Jenkins crea pases, enviamos el código a nuestra aplicaciónOpenShift (utilizando el complemento de implementación Openshift en Jenkins).

El problema que tenemos como ya habrás descubierto, es que:

enapplication.properties No podemos codificar la información de MySQL. Dado que nuestro proyecto se ejecutará en 3 lugares diferentes (local, JenkinsyOpenShift) necesitamos hacer que el campo del origen de datos sea dinámico enapplication.properties (sabemos que hay diferentes maneras de hacerlo, pero estamos trabajando en esta solución por ahora).

spring.datasource.url = 
spring.datasource.username = 
spring.datasource.password = 

La solución que se nos ocurrió es quecrear variables de entorno del sistema localmente y en Jenkins vm (nombrándolos de la misma manera que OpenShift los nombra) y asignándoles los valores correctos respectivamente:

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

Hemos hecho esto y funciona. También hemos verificado conMap<String, String> env = System.getenv(); que las variables de entorno se pueden convertir en variables java como tales:

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");   
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");   
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST"); 
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

Ahora lo único que queda es que necesitamos usar estas variables de Java en nuestroapplication.properties y eso es con lo que estamos teniendo problemas.

¿En qué carpeta y cómo debemos asignar elpassword, userName, sqlURLysqlPort variables paraapplication.properties para poder verlos y cómo los incluimos enapplication.properties?

Hemos probado muchas cosas, una de ellas es:

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

Sin suerte hasta ahora. Probablemente no estamos colocando estas variables env en la clase / carpeta correcta o las estamos usando incorrectamente enapplication.properties.

¡¡Tu ayuda es altamente apreciada!!

¡Gracias!

Respuestas a la pregunta(8)

Su respuesta a la pregunta