July 5th, 2010

Liquibase – Maven plugin

Miguel Angel Conte

Liquibase es una herramienta open source que nos permite gestionar el refactor de la base de datos, de forma tal, que todo lo que se cree o modifique quedará versionado mediante svn o el sistema de gestion de versiones que utilicemos.
De esta forma, obtenemos un manejo limpio de la base de datos, sin caer en soluciones poco mantenibles como el versionado manual de multiples scripts.
La manera en que liquibase consigue esto, es manejando el refactor mediante un archivo xml que contendra lo que llaman “changeLogs”. Cada changeLog, contendrá uno o varios refactors.


Algunas de las cosas que nos permite hacer liquibase, son:

  • Creación, borrado y update de todos los objetos de la base de datos (tablas, vistas, índices, etc…)
  • Utilización de tags de refactor propios de liquibase o sql.
  • Nos permite hacer rollbacks de changeLogs
  • Generar scripts para el update de la base a la versión actual
  • Generar tag para un estado específico de la base de datos.
Puntualmente, en este post, haré referencia al plugin de liquibase para maven. La versión core de liquibase, permite hacer cosas mas avanzadas como por ejemplo hacer diff entre versiones de 2 bases de datos.
Para demostrar la utilización del plugin, veremos los pasos de creación de una tabla, el agregado de un campo, y el rollback de los cambios realizados.
1- Configuración del plugin

a) Agregar la dependencia del conector a la base (en este ejemplo MySql)

b) Agregar el plugin: En el ejemplo, configuramos los datos de la conexion directamente en el pom, pero tambien se pueden externalizar en un archivo.


junit
junit
3.8.1
test

mysql
mysql-connector-java
5.0.5

org.liquibase
liquibase-plugin
1.9.0.0

com.mysql.jdbc.Driver
changelog.xml
jdbc:mysql://localhost/liquibase
root
2-Changelog de creación de la tabla.

A continuación, crearemos una tabla con el tag de creación que nos provee liquibase.

El goal del plugin que nos permite ejecutar el changelog es “update”

mvn liquibase:update

3-Changelog de agregado de un campo

En el caso de querer agregar un campo, agregaremos otro changelog para esto.


Nuevamente corremos un update para que se apliquen los cambios.
4-Rollback de changelogs

Por default, y sin que lo tengamos que indicar con un tag, siempre se puede hacer rollback de un changelog.
En el caso de que ademas de deshacer lo que hicimos en ese changelog necesitemos hacer otras cosas en el rollback, podemos agregar el tag <rollback> y las sentencias que implica.
En este caso, utilizaremos el goal rollback con el parametro rollbackCount. Con eso indicamos, desde el ultimo cambio, a cuantos changeLogs queremos aplicarle rollback. Como en nuestro caso queremos deshacer el cambio del agregado del campo, indicaremos 1.

mvn liquibase:rollback -Dliquibase.rollbackCount=1

Supongo que mas de uno estará pensando en lo tedioso que puede volverse escribir este xml. Al comienzo del proyecto, ademas del core y del plugin para maven comenzaron a desarrollar el “liquibase IDE”, y plugines para eclipse e IntelliJ. En su momento me baje el plugin para eclipse, y mas alla de los bugs (era version 0.6),  se hacía muy práctico hacer el refactor, dado que todo se reducía a “boton derecho, add table”. Lamentablemente, tanto el IDE como el plugin para eclipse, no siguieron evolucionando. El que sí evolucionó fue el plugin para IntelliJ, que se mantiene al día con el core…habrá dinero de por medio?.

Segun Nathan Voxland (el creador del proyecto), prefiere avanzar con el core para luego dedicarse el ide, aunque  en algunos foros aseguran que el proyecto del plugin de eclipse está abandonado…

Para terminar les dejo el link del proyecto, donde encontrarán un quick start, todos los goals que incluye el plugin y un manual con lo necesario para que puedan probarlo: http://www.liquibase.org/

Dejar un comentario