Índice de contenidos
1. Entorno
Este tutorial está escrito usando el siguiente entorno:
- Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
- Sistema Operativo: LUbuntu 18.04
- Spring Boot 1.5.8.RELEASE
2. Introducción
Cuando en el back estamos trabajando con Spring Boot para un producto que tiene que ser potencialmente desplegable en distintos entornos nos podemos encontrar con distintas bases de datos que integrar con nuestra aplicación.
Flyway es una herramienta de migración de base de datos que nos permite tener un control de versiones de la base de datos y estar seguros de qué versión de base de datos se corresponde con qué versión de la aplicación; de forma que podemos llegar a automatizar no solo el despliegue de la aplicación sino también los cambios requeridos en base de datos para su correcto funcionamiento.
En este tutorial vamos a ver cómo podemos configurar nuestro proyecto gestionado con Maven y Spring Boot para permitir a Flyway trabajar con distintas bases de datos.
3. Vamos al lío
Para integrar Flyway con nuestro proyecto de Spring Boot solo tenemos que añadir la siguiente dependencia al pom.xml
org.flywaydb flyway-core
Como todo en Spring Boot, es decir por convención, Spring Boot va a buscar los ficheros de migración de Flyway dentro de la ruta src/main/resources/db/migrations, esto está muy bien cuando trabajamos con una sola base de datos, pero si queremos trabajar con más de una esta configuración no nos vale.
Por tanto necesitamos cambiar esta convención, para lo cual editamos el fichero application.properties de nuestro proyecto y añadimos la propiedad flyway.locations indicando el vendor con un placeholder. También podemos determinar si queremos habilitar o no flyway con la propiedad flyway.enabled
flyway.enabled=true flyway.locations=classpath:/db/migration/{vendor}/
De esta forma ahora dentro de la carpeta migration podemos tener todas las carpetas de vendor que queramos (MySQL, Oracle, PostgreSQL, …) podemos deducir el identificador en la siguiente clase: DatabaseDriver
Ahora Spring Boot y Flyway de forma automática cuando detecten que la base de datos objetivo es de un determinado vendor, irán a la correspondiente carpeta a aplicar los ficheros de changelogs que estén determinados. La forma de estos ficheros la explica muy bien nuestro compañero Yair Segura en este tutorial.
4. Conclusiones
Gracias a Spring Boot la configuración para hacer que Flyway nos pueda servir para soportar distintas bases de datos es muy sencilla, lo realmente complicado es mantener nuestras queries SQL compatibles con la mayoría de gestores de bases de datos y no hacer uso de los atajos que nos proporcionan alguno de ellos y que lo hacen incompatibles con el resto.
Cualquier duda o sugerencia en la zona de comentarios.
Saludos