Migraciones de bases de datos en Java: descripción general de herramientas populares

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Migraciones de bases de datos en Java: por qué son necesarias y cómo funcionan



El desarrollo de cualquier aplicación seria en Java está intrínsecamente ligado a la evolución del esquema de la base de datos. Agregar nuevos campos, cambiar tipos de datos, crear índices: todo esto es inevitable durante el desarrollo del proyecto. La ejecución manual de scripts SQL en diferentes entornos (entorno de desarrollo local, servidor de pruebas, producción) rápidamente conduce al caos: los scripts se pierden, se ejecutan en el orden incorrecto y la base de datos de un equipo difiere de la de otro. La solución a este problema son las migraciones de bases de datos (database migrations).



Las migraciones permiten versionar los cambios de esquema, aplicarlos automáticamente en la secuencia correcta y revertirlos si es necesario. En el mundo de Java, existen dos líderes indiscutibles en esta área: Flyway y Liquibase. Analicémoslos en detalle.



Flyway: simplicidad y fiabilidad



Flyway es una herramienta de migración ligera, simple y potente. Su filosofía: "Las migraciones son simplemente SQL o clases Java". Los principios básicos de funcionamiento son:



  • Versionado: cada archivo de migración tiene un número de versión único (por ejemplo, V1__create_users.sql, V2__add_email.sql).
  • Orden de ejecución: Flyway realiza un seguimiento de las migraciones aplicadas en una tabla especial (flyway_schema_history) y solo aplica las nuevas.
  • Dos tipos de migraciones: scripts SQL y migraciones Java (para lógica compleja).
  • Reversión: se admiten migraciones "undo" (en la versión de pago) o la escritura manual de scripts de reversión.


Ejemplo de trabajo con Flyway



Supongamos que necesita crear una tabla de usuarios. Crea el archivo db/migration/V1__create_users.sql:



CREATE TABLE users (    id BIGINT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(50) NOT NULL,    email VARCHAR(100) NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);


Luego agrega la segunda migración V2__add_age.sql:



ALTER TABLE users ADD COLUMN age INT;


La conexión de Flyway a una aplicación Spring Boot se realiza a través de application.properties:



spring.flyway.enabled=truespring.flyway.locations=classpath:db/migrationspring.datasource.url=jdbc:postgresql://localhost:5432/mydbspring.datasource.username=userspring.datasource.password=pass


Al iniciar la aplicación, Flyway verificará la tabla de historial y aplicará todas las migraciones nuevas. Si una migración ya se ha ejecutado, se omitirá.



Liquibase: flexibilidad y control



Liquibase es una herramienta más flexible y potente que admite varios formatos para describir cambios: XML, YAML, JSON y SQL. Su característica clave son los changesets (conjuntos de cambios).



  • Identificador único: cada changeset tiene un id y un author.
  • Generación automática de SQL: Liquibase puede generar SQL para un DBMS específico (PostgreSQL, MySQL, Oracle, etc.).
  • Contextos: permite separar migraciones para diferentes entornos (dev, test, prod).
  • Reversión: cada changeset puede tener una instrucción de reversión (rollback).


Ejemplo de trabajo con Liquibase



Ejemplo de changeset en formato XML (db/changelog/db.changelog-master.xml):



<?xml version="1.0" encoding="UTF-8"?><databaseChangeLog    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.9.xsd">

<changeSet id="1" author="pythonlib"> <

Recommendations