En este artículo, hablaremos sobre Flyway y Liquibase , las dos herramientas de refactorización de bases de datos basadas en Java más populares. El propósito del artículo es comparar estas herramientas y descubrir cuál es mejor usar en qué casos.

Flyway
El concepto Flyway se centra en seis equipos diferentes para admitir la refactorización y el control de versiones automatizados de la base de datos. Estos comandos pueden ejecutarse desde la línea de comandos, durante el proceso de compilación (producido usando Maven o Gradle), o directamente desde el código Java usando llamadas API. Al ejecutar estos comandos, debe proporcionar los parámetros para conectarse a la base de datos (url, nombre de usuario, contraseña) que desea refactorizar.
El comando principal se llama migrate
y realiza una función que contiene toda la esencia de la refactorización de la base de datos: escanea una carpeta especial con scripts sql (cada uno de los cuales tiene un número de versión en el nombre del archivo) y comprueba cuál de ellos ya se ha aplicado a la base de datos de destino. Luego ejecuta aquellos de ellos que aún no se han aplicado a esta base de datos. En caso de conflicto, por ejemplo, si el script que ya se ha aplicado ha cambiado desde su uso, Flyway interrumpe su funcionamiento con un mensaje de error.
Una característica única de Flyway es que los scripts de migración pueden estar no solo en formato SQL, sino también en forma de código Java. La segunda opción le permite implementar migraciones dinámicas con lógica compleja. Sin embargo, debe utilizar el enfoque de Java con precaución, ya que estos scripts de migración suelen ser difíciles de depurar si algo sale mal.
Además del comando principal de migrate
, Flyway tiene comandos adicionales que facilitan el proceso de refactorización de la base de datos.
El comando info
muestra todos los scripts de migración disponibles de una carpeta determinada y señala cuáles de ellos ya se han utilizado y cuáles solo se aplicarán a la base de datos de destino.
Para verificar si los scripts aplicados a la base de datos han cambiado, se utiliza el comando validate
. Es útil para nosotros saber si el script ya aplicado de la carpeta ha cambiado desde que se aplicó a la base de datos, porque esto puede significar que el script se aplicó a diferentes bases de datos en diferentes versiones, y esto puede causar problemas.
Si cree que los scripts deben usarse a pesar de la falla que muestra el comando validar, puede ejecutar el comando de reparación. Restablecerá la tabla de la base de datos utilizada por Flyway para corregir qué scripts ya se han aplicado (de forma predeterminada, esta tabla se llama SCHEMA_VERSION).
Y el último, pero no menos importante, comando de clean
borra completamente el esquema seleccionado (como usted sabe, este comando debe usarse solo para bases de datos de prueba).
Liquibase
Liquibase adopta un enfoque diferente para implementar la refactorización de bases de datos. A diferencia de Flyway, que admite scripts de migración solo en formatos SQL y Java, Liquibase le permite abstraer de SQL y así eliminar la refactorización de la base de datos de su implementación específica.
En lugar de scripts SQL, Liquibase admite scripts de migración en formatos XML, YAML y JSON. En estos scripts, usted define cambios en la base de datos en el nivel de abstracción. Para cada cambio, Liquibase tiene un elemento correspondiente en XML, YAML y JSON. Por ejemplo, un cambio que crea una nueva tabla de base de datos en formato YAML tiene este aspecto:
createTable: tableName: Customer columns: - column: name: name type: varchar(255) - column: name: address type: varchar(255)
Los cambios como add column
, create index
o alter table
y otros, se parecen.
Durante la operación, Liquibase aplica automáticamente todos los scripts que aún no se han utilizado y, como Flyway, guarda sus metadatos en una tabla de base de datos especial. Al igual que Flyway, Liquibase se puede invocar desde la línea de comandos de las herramientas de compilación o directamente a través de su API de Java.
¿Cuándo usarlos?
Tanto Flyway como Liquibase admiten todas las funciones necesarias para la refactorización y el control de versiones de la base de datos profesional, por lo que siempre sabrá con qué versión del esquema de la base de datos está tratando y si coincide con la versión de su software. Ambas herramientas están integradas con Maven y Gradle y en el ecosistema Spring Boot, por lo que la refactorización de la base de datos puede automatizarse por completo.
Flyway utiliza SQL para identificar cambios en la base de datos, por lo que puede configurar scripts SQL para que funcionen de manera efectiva con tipos específicos de bases de datos en su proyecto, como Oracle o PostgreSQL. Por otro lado, Liquibase introduce un nivel adicional de abstracción utilizando XML, YAML o JSON para detectar cambios en la base de datos. Por lo tanto, Liquibase es más adecuado para el software que necesita instalarse en diferentes entornos con diferentes tipos de servidores de bases de datos. Sin embargo, si necesita un control total sobre su SQL, Flyway es su elección, ya que le permite modificar la base de datos utilizando SQL totalmente personalizado o incluso utilizando código Java.
El problema con ambas herramientas es que son compatibles con una persona (del traductor: según el autor) y no con un gran equipo. Esto puede tener un impacto negativo en el desarrollo futuro de ambas herramientas, pero esto no es necesario. Al momento de escribir este artículo, la actividad en el repositorio Flyway GitHub es mayor que en el repositorio Liquibase .