Migración de SQL con Flyway en Spring Boot
En esta nueva entrada de refactorizando vamos a ver como podemos realizar una migración de SQL con Flyway en Spring Boot. Si quieres ver más sobre como utilizar bases de datos con Spring Boot y JPA puedes echar un vistazo a este artículo sobre Spring Boot y JPA con Postgresql.
¿Qué es Flyway?
Flyway es un sistema robusto de migración de base de datos, que funciona con diferentes bases de datos y hace cualquier migración fácil y sencilla. Tiene compatibilidad con Java y también puede realizar migraciones a través de plugins de maven y gradle, por ejemplo:
mvn flyway:migrate -Dflyway.url=... -Dflyway.user=... -Dflyway.password=...
Flyway creará una tabla en la base de datos que le indiques en donde guardará un histórico de actualizaciones y versiones de esta manera tendrás registrado en todo momento tus scripts de sql.
Como funciona Flyway
Flyway nos va a ayudar a seguir una trazabilidad de que scripts que ya se han migrado, cuando y quién lo ha realizado. Esta nueva tabla que Flyway crea en nuestro schema, va añade metada con un checksum en el que se indica si la migración tuvo éxito.
Cuando se ejecuta flyway para realizar una migración de sql, se realiza las siguiente comprobaciones:
- Se crea la tabla en la que guardar la información.
- Se analiza los ficheros de la migración.
- Se comparan los ficheros con las migraciones pasadas si ha habido cambios en los ficheros de versiones anteriores fallará la migración.
- Los nuevos scripts de migración serán ejecutados y se añadirá la información de los nuevos scripts.
Ejemplo de migración de Flyway con Spring Boot
A continuación vamos a utilizar unos scripts en sql para realizar una migración através de Flyway. Una vez hemos añadido Flyway podremos ver su funcionamiento en nuestra aplicación con Spring Boot al que añadiremos Spring Data para comunicar con un PostgreSql.
Dependencias maven de Flyway
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
El parent de Spring boot será el encargado de añadir la versión de Flyway. Una vez que se añade esta dependencia Spring Boot se encargará de inicializar Flyway.
Configuración de Flyway en Spring Boot
Flyway nos va a permitir realizar su configuración a partir del application.properties o application.yml, para ello vamos a definir las propiedades que necesitemos:
spring: flyway: enabled: true locations: classpath:/db/scripts/migration schemas: refactorizando
A destacar de la anterior configuraicón sería locations, en la que le hemos indicado la ruta de los scripts, por defecto, y sino se específica lo contrario la ruta sería classpath:db/migration.
Si quieres ver más propiedades de configuración puedes echar un ojo a la documentación de Spring.
Creación de SQL para usar con Flyway en Spring Boot
Una vez hemos creado el fichero de configuración en el que le específicamos de donde se cargaran los scripts de flyway, vamos a añadir los ficheros SQL.
Es muy imporante que el nombre del fichero tenga el formato, V{número-versión}__{nombre}.sql
Para que Flyway pueda procesar los ficheros SQL es muy importante nombrar adecuadamente el fichero con V{número}__{nombre}.sql, por ejemplo:
V1.0__create_tables.sql
Una vez hemos creado los ficheros necesarios para realizar la migración tan solo nos queda realizar la configuración para que funcione con Spring Data tal y como vimos en este artículo.
Posibles errores con Flyway
Cuando estamos trabajando con flyway e intentamos desplegar nuestro proyecto podemos encontrar errores tales como:
- Wrong migration name format: Esto nos indica que el nombre que hemos indicado es incorrecto, ten en cuenta que tiene que ser V{número}__{nombre}.sql.
- Flyway migration failed: Este es sin duda uno de los errores más comunes que nos podemos encontrar cuando hacemos uso de flyway. Este error se refiere a cuando un fichero anterior ha sido modificado, entonces el checksum que flyway genera detectará el cambio y dará error, para evitar este error debemos de evitar cambiar ficheros antiguos y generar nuevos ante cualquier cambio.
Conclusión
En esta entrada sobre migración de SQL con Flyway en Spring Boot, hemos visto como podemos añadir Flyway en nuestras aplicaciones para poder realizar migraciones de SQL. Pero sin duda es mejor ver un ejemplo para poder entenderlo mejor, que lo puedes encontrar en nuestro Github.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com y te ayudaremos encantados!
No te olvides de seguirnos en nuestras redes sociales Facebook o Twitter para estar actualizado.
2 pensamientos sobre “Migración de SQL con Flyway en Spring Boot”