¿Estas cansado de tener que escribir tus scripts de bbdd?¿Te gustaría poder trackearlos de una forma sencilla en tu repositorio? Hoy os voy a enseñar una solución sencilla para autogenerar a partir de vuestras entities JPA los scripts necesarios para crear el DDL de vuestra bbdd. Además, generaremos el SQL de forma incremental en cada versión del proyecto, es decir, generaremos Alter Tables en lugar de generar de nuevo todo el DDL con cada modificación de las entities. También crearemos dos bases de datos H2 en memoria, una con la versión ya publicada del DDL (released) y otra con las modificaciones añadidas durante el Sprint (snapshot), de forma que podremos crear tests de integración para probar la compatibilidad de ambas versiones. Esto promete... ¿verdad?. Pues empecemos viendo los plugins de Maven que vamos a usar:
build-helper-maven-plugin:
Lo utilizaremos para parsear la versión de nuestro proyecto, generando varias properties con la versión mayor, minor e incremental, que luego nos servirán para nombrar los ficheros.
copy-rename-maven-plugin:org.codehaus.mojo build-helper-maven-plugin 1.10 parse-version parse-version
Lo usaremos para copiar la ultima versión publicada de la bbdd, de esta forma, podemos evaluar los cambios que ha habido en el DDL desde ese momento, sin que tengamos que preocuparnos de cambios intermedios durante la versión: queremos generar un único fichero con todos los cambios en el DDL que se hayan producido.
com.coderplus.maven.plugins copy-rename-maven-plugin 1.0 copy-file validate copy src/main/resources/db/example_released.mv.db src/main/resources/db/example_snapshot.mv.db
hibernate3-maven-plugin:
Hibernate se encargará de comparar la bbdd ´snapshot´, copia de la version ´released´ (y que será configurada en el persistenceUnit) con las entities JPA de nuestro proyecto, generando un fichero con el DDL necesario para actualizar la bbdd para que represente con exactitud a las entities.
org.codehaus.mojo hibernate3-maven-plugin 3.0 validate hbm2ddl org.hibernate hibernate-entitymanager 3.6.10.Final com.h2database h2 1.4.191
flyway-maven-plugin:
Este plugin es capaz de leer los Scripts versionados con el DDL de la bbdd y ejecutarlos secuencialmente para generar un fichero H2 (released) con los mismos.
org.flywaydb flyway-maven-plugin 4.0.3 db/scripts EXAMPLE_SCHEMA jdbc:h2:file:./src/main/resources/db/example_released sa install migrate com.h2database h2 1.4.191
FLUJO:
En la solución propuesta tenemos dos profiles de maven:
createScript: ejecutará los 3 primeros plugins, de forma que, se copiará la ultima bbdd publicada con flyway (released), correspondiente a la ultima versión cerrada del proyecto. A partir de esta nueva bbdd (snapshot), hibernate evaluará las entities JPA del proyecto y generará el DDL con los cambios encontrados, los cuales se almacenarán en un fichero generado con la versión actual del proyecto. Adicionalmente se aplicarán estos cambios en la versión ´snapshot´ de la bbdd. Podemos ejecutar este profile tantas veces como necesitemos durante el desarrollo de la versión, resultando un único fichero con todos los cambios realizados.
releaseScript: Flyway se encargará de migrar los ficheros generados a la versión ´released´ de la bbdd H2. Ejecutaremos este profile junto al cierre de versión del proyecto.
Podéis encontrar todo el código de ejemplo en mi Gitlab siguiendo el siguiente enlace:
Proyecto de ejemplo en GitLab
No hay comentarios:
Publicar un comentario