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.
No hay comentarios:
Publicar un comentario