8 de junio de 2021

Ejecutar API para entornos distintos

Ahora ya tenemos dos entornos y no parece cómodo estar cambiando los archivos de propiedades por ejemplo para ejecutar la API usando una BD u otra. Spring tiene la capacidad de activar perfiles que pueden modificar entre otras cosas los beans o propiedades que use la aplicación.

Esta entrada no tratará sobre usar perfiles, pero valiéndonos de ellos, vamos a ejecutar nuestra API apuntando a una BD o a otra en función del perfil/entorno donde queramos ejecutar.

Vamos a mantener el fichero de propiedades de desarrollo (el que usa H2) para el perfil por defecto y nos vamos a crear otro fichero llamado application-prod.properties para las propiedades que quiero sobrescribir para este perfil (y que tendrá las credenciales de Postgre).

El fichero application-prod.properties quedaría así:
spring.datasource.url=jdbc:postgresql://kandula.db.elephantsql.com:5432/usuario
spring.datasource.username=usuario
spring.datasource.password=password
spring.datasource.driver-class-name=org.postgresql.Driver

hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

logging.level.es.lanyu=INFO
Y ahora vamos a duplicar nuestra configuración de ejecución y le vamos a poner un nombre que quede claro que es para producción. En esta configuración vamos a añadir una propiedad a nuestra JVM que es la de spring.profiles.active=prod. En la casilla correspondiente añadimos esto precedido de -D:
-Dspring.profiles.active=prod

Si ejecutamos con la nueva configuración de ejecución esta propiedad va a estar establecida, pero nuestra ejecución de bootRun no la cogerá. Vamos a hacernos una tarea que coja ese valor y lo establezca en la tarea bootRun. Añadimos este código a nuestro build.gradle:

task cloneJvmProfile {
    ext.profile = System.getProperty("spring.profiles.active")
    if (profile != null) {
        println "Setting $profile profile in bootRun"
        bootRun.systemProperties.put("spring.profiles.active", profile)
    }
}

Ahora ya podemos ejecutar nuestra anterior configuración de ejecución en Eclipse para levantar la API apuntando a H2 o usar la nueva para apuntar a Postgre.

Del mismo modo ahora se puede establecer el perfil a usar en Heroku para que use el de producción y ya no tenemos que cambiar nuestros ficheros .properties. Nos vamos a nuestra app de Heroku > Settings > Config Vars y añadimos la clave valor siguiente:

SPRING_PROFILES_ACTIVE = prod

Puedes conseguir el código hasta aquí en su repositorio.

Compárteme

Entradas populares