Liquibase + JPA Buddy: una combinación ganadora

Liquibase + JPA Buddy: el problema que resuelve

Un problema habitual en muchos proyectos y marcos de trabajo es la gestión de los cambios en la estructura de la base de datos durante la vida del proyecto. Reducido al mínimo, este problema puede formularse del siguiente modo: ¿Cómo puedo automatizar la actualización de una base de datos en función de los cambios realizados en las entidades del proyecto?

Veamos cómo se puede resolver este problema en un proyecto Spring Boot sin tener que escribir scripts SQL y ejecutarlos manualmente. Basamos este tutorial en JPA Buddy, que se integra con IntelliJ IDEA.

A continuación, debemos instalar el plugin IntelliJ IDEA JPA Buddy. Además, es necesario disponer de la versión Ultimate de IntelliJ IDEA.

Comencemos con un proyecto Spring Boot. En nuestro caso, el proyecto básico es una implementación de demostración de un host Sparkplug primario: una aplicación Spring Boot que implementa la base de la especificación Sparkplug B v1.0.

El detalle de la aplicación aquí es irrelevante; baste decir que se conecta a una base de datos PostgreSQL llamada sparkplugdemo.

Añadimos la dependencia de Liquibase al pom.xml:

En el directorio src/main/resources creamos db/changelog y aquí un fichero db.changelog-master.xml. El contenido inicial del archivo debe ser:

 

Nella cartella src/main/resources si crea db/changelog e qui un file db.changelog-master.xml. Il contenuto iniziale del file deve essere:

spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
spring.liquibase.enabled=true
spring.liquibase.url=jdbc:postgresql://localhost:5431/sparkplugdemo
spring.liquibase.user=[DATABASE_USER]
spring.liquibase.password=[DATABASE_PASSWORD]

En el bloque de propiedades anterior especificamos para Liquibase el fichero maestro de changelog, que en nuestro caso está en formato XML, y los parámetros de conexión a la base de datos que Liquibase debe actualizar.
De esta forma, cuando la aplicación arranca, comprueba que la base de datos a la que se va a conectar está correctamente actualizada mediante una tabla de histórico de cambios. Si se han realizado nuevos cambios en la estructura de la base de datos, Liquibase realizará automáticamente las actualizaciones indicadas en los distintos changelogs que aún no se hayan aplicado.

Así es como aparece el archivo con su contenido inicialmente. Después, no habrá necesidad de editar este archivo manualmente: JPA Buddy lo hará por nosotros.

Abramos ahora la pantalla del plugin JPA Buddy (que se encuentra bajo el nombre JPA Explorer).

Desde aquí podemos seleccionar el +.

A continuación, elegimos la opción Init Changelog.

Utilizamos el modelo como fuente y configuramos el tipo de base de datos.

Se generará un archivo de registro de cambios y, a continuación, aparecerá una pantalla similar a la siguiente.

Cambie el directorio y el nombre del archivo. Este paso es opcional; es importante configurar la inclusión del registro de cambios en el archivo maestro creado al principio, como se ve a continuación en Incluir a.

A continuación, se generará el directorio con el archivo de registro de cambios:

 

El archivo db.changelog-master.xml incluirá automáticamente el nuevo registro de cambios. No es necesario hacerlo a mano.

Nuestro registro de cambios contendrá algo como lo siguiente:

 

Ahora aplicamos los cambios a la base de datos volviendo a la pantalla del plugin JPA Buddy y seleccionando el icono correspondiente a la actualización.

liquibase

Se nos pedirá la conexión de la base de datos a actualizar. Evidentemente, la base de datos debe estar presente (aunque esté vacía). Creémosla, pues, antes de realizar esta operación.

Después de la actualización, veremos un mensaje de éxito.

Si ahora modificamos las entidades de nuestro proyecto, bastará con generar un registro de cambios de diferencias desde el plugin JPA, como puede verse en la siguiente captura de pantalla.

liquibase

Gracias por seguir este pequeño tutorial, si aún tienes “sed” de píldoras tecnológicas, ¡no te pierdas ni un tema de nuestro blog!