Liquibase: Gestionando los cambios de la BBDD

Para los que trabajan en aplicaciones donde poseen mas de un entorno (desarrollo, test, pre-producción, producción) o cada uno de los desarrolladores posee su propia base de datos local, se convierte en algo engorroso a la hora de aplicar los distintos cambios que fueron apareciendo de versión en versión como así saber hasta que versión se encuentra en un entorno en particular (esto es con el fin de saber a partir de que versión debo cambios debo aplicar los cambios). Ademas es algo molesto tener que encargarse de ejecutar de forma manual cada uno de los cambios en la base de datos.

Ahora bien como solución a estos problemas es que aparece Liquibase, que nos permitirá resolver estos problemas de una manera simple y organizada.

¿Que es?

Liquibase es una librería open-source basada en Java que se encarga de la gestión y aplicación de cambios que se producen en nuestra base de datos independientemente de cual sea la que se use (base de datos relacionales). La idea central de esta librería es que cada uno de los miembros del equipo puedan contar con la información relacionada con los distintos cambios que sufrió la base de datos, quien fue la persona que los realizo y en que fecha o versión fueron hechos.

Ademas esta librería ha sido diseñada para poder ser utilizada por linea de comandos pero en las ultimas versiones de la misma se integra fácilmente con Maven (en lo que es entornos Java), de igual manera la libreria no esta pensaba para ser utilizaba exclusivamente para aplicaciones Java sino que por el contrario la idea es que pueda ser utilizada sin importar que usemos para crear nuestra aplicación.

Caracteristicas

  • Soporta múltiples desarrolladores
  • Soporta multiples tipos de base de datos
  • Soporta varios formatos para escribir los cambios (XML, YAML, JSON y SQL)
  • No requiere una conexión activa con la base de datos para realizar los cambios.
  • Genera documentación acerca de los cambios que se realizo (existen 2 tablas que se encargan de guardar toda la información de los cambios realizados).
  • Permite deshacer cambios ya realizados.

¿Como funciona?

Liquibase utiliza archivos XML en los cuales se describen los distintos cambios que se realizaran, también conocidos como changesets. Cada uno de estos changeset se identifican internamente por medio de un id, el autor del cambio como así también el nombre del archivo.

Ahora bien cuando Liquibase aplica un changeset aparte de realizar las modificaciones pertinentes en la base de datos registra en la misma cuales fueron los changeset que se ejecutaron. Esta información se almacena en la tabla “DatabaseChangeLog” la cual es generada por Liquibase y es esta librería la que se encarga de todas las operaciones sobre la misma.

¿Como lo instalo?

Veamos la forma de instalar Liquibase en nuestro entorno (esto es solo necesario cuando no usamos proyectos del tipo Maven o simplemente queremos controlar los cambios por fuera de Java) para ello deberemos descargarlo de este link y una vez que lo hayamos descargado lo descomprimido en el directorio que mas nos guste.

Luego lo único que nos queda por hacer es añadir dentro de las nuestras variables de entorno Liquibase para que por linea de comandos lo podamos utilizar, para ello deberemos:

  • Linux: En el caso de las distintas distribuciones de este sistema operativo deberemos agregar a nuestro archivo /etc/environment agregar la siguiente linea al final del mismo

  • Windows: En el caso de este sistema operativo deberemos es mas sencillo deberemos posicionarnos en “Mi PC” y hacer click con el botón derecho. Luego de esto hacer click en “Propiedades” y por ultimo en “Configuracion Avanzada del Sistema”, para por ultimo modificar la ya existente variable Path agregandole al final la ruta de liquibase.

Para poder comprobar que todo ha salido correctamente lo que deberemos hacer es abrir una consola y tipear el comando liquibase, el cual nos debería arrojar una salida como la siguiente:

¿Como lo uso?

Veamos los pasos que deberemos hacer si queremos implementar Liquibase para controlar los cambios de nuestra base de datos:

Paso 1

Para poder utilizar Liquibase deberemos crear un archivo XML (changeLogFile) que contenga los changeset, los mismos estarán contenidos dentro databaseChangeLog. La estructura del archivo debería tener el siguiente contenido por default:

Paso 2

Una vez creado nuestro changeLogFile lo único que nos queda es ir agregando nuestros changeSet (que son los distintos cambios que se van a realizar), los cuales se identifican por un id (que debe ser único) y por algún tipo de dato que identifique al autor de los cambios. Veamos un ejemplo de como seria un changeSet:

La idea de este changeSet es que cuando se ejecute se cree una tabla categoría con 2 campos id (que es la primary key) y otro que contenga el nombre de la misma. Notese que no se encuentra la sentencia SQL en ningún momento ya que la idea central de esta librería es que la misma se genere cuando se ejecute Liquibase, esto no quiere decir que podamos colocar un SQL como parte de un changeSet pero por ahora limitemos el ejemplo al uso de XML.

Paso 3

Una vez que hallamos creado los changeSet que queramos lo único que nos queda por hacer es ejecutar Liquibase para que se encargue de hacer la magia de modificar la base de datos por nosotros, para ello deberemos ejecutar el siguiente comando:

Cuando finalice la ejecución de este comando nos debería mostrar un mensaje como este “Liquibase Update Successful” que indicara que la base de datos

Esto es para la opción de quererlo ejecutar por linea de comandos pero en futuros post veremos como integrarlo con Maven.

Paso 4 (opcional)

Antes de poder ejecutar Liquibase deberemos contar con el driver correspondiente a nuestra base de datos para lo que es Java, en este link están las base de datos soportadas hasta el momento.

Para este ejemplo estaremos usando una base de datos del tipo MySql, el Driver de la misma puede ser descargado de aqui.

Paso 5

Lo ultimo que nos queda por hacer es chequear nuestra base de datos para ver si los cambios fueron hechos correctamente, y ademas chequear de que se crearon correctamente 2 tablas nuevas relacionadas con Liquibase (databasechangelog, databasechangelock).

Mas allá de explicar el paso a paso de como usarlo de forma básica dejamos en este link el código y el driver de MySql para que puedan probar de forma rapida.

Conclusión

Como hemos visto a lo largo de este post, Liquibase nos provee de grandes ventajas a la hora de trabajar con entornos distribuidos y una forma sencilla de poder manejar los cambios sin necesidad de llevar un control manual de los mismos. En este post se trato de dar una breve introducción acerca del mismo y en futuros post tocaremos con mas detalle los tipos de cambios que se pueden realizar, buenas practicas y la integración con Maven.

You may also like...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *