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=INFOspring.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.
 
