Liquibase + JPA Buddy: il problema che va a risolvere
Un problema comune a molti progetti e framework è la gestione dei cambiamenti della struttura del database durante la vita del progetto. Ridotto ai minimi termini, questo problema si può formulare come segue: come posso automatizzare l’update di un database sulla base delle modifiche effettuate alle entità del progetto?
Vediamo come sia possibile risolvere questo problema in un progetto Spring Boot senza dover scrivere script SQL ed eseguirli manualmente. Ci basiamo per questo tutorial su JPA Buddy, che si integra con IntelliJ IDEA.
Dobbiamo quindi installare il plugin di IntelliJ IDEA JPA Buddy. Inoltre, è necessario avere la versione Ultimate di IntelliJ IDEA.
Partiamo da un progetto Spring Boot. Nel nostro caso, il progetto di base è un’implementazione demo di un primary host Sparkplug: un’applicazione Spring Boot che implementa la base della specifica Sparkplug B v1.0.
Il dettaglio dell’applicazione qui è irrilevante; basti solo sapere che si connette a un database PostgreSQL chiamato sparkplugdemo.
Aggiungiamo la dipendenza Liquibase al pom.xml:
Nella directory src/main/resources creiamo db/changelog e qui un file db.changelog-master.xml. Il contenuto iniziale del file dev’essere:
Aggiungiamo ora il riferimento a Liquibase nel file application.properties di Spring Boot:
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]
Nel blocco di proprietà precedenti specifichiamo per Liquibase il file di master changelog, che nel nostro caso è in formato XML, e i parametri di connessione al database che Liquibase dovrà aggiornare.
In questo modo, quando l’applicazione si avvia, verifica che il database a cui si deve connettere sia correttamente aggiornato mediante una tabella di storico di changelog. In caso siano state apportate nuove modifiche alla struttura del database, Liquibase eseguirà automaticamente gli update indicati nei vari changelog non ancora applicati.
Così appare il file con il suo contenuto inizialmente. In seguito, non ci sarà bisogno di editare manualmente questo file: JPA Buddy lo farà per noi.
Apriamo ora la schermata del plugin JPA Buddy (si trova con il nome JPA Explorer).
Da qui possiamo selezionare il +.
Scegliamo poi l’opzione Init Changelog.
Usiamo come source il modello e configuriamo il tipo di database.
Verrà generato un file di changelog, quindi comparirà una schermata simile alla seguente.
Modifichiamo la directory e il nome del file. Questo passaggio è opzionale; è importante che sia configurata l’inclusione del changelog nel file master creato all’inizio, come si vede sotto in Include to.
Verrà quindi generata la directory con il file di changelog:
Nel file db.changelog-master.xml sarà incluso automaticamente il nuovo changelog. Non c’è bisogno di farlo a mano.
Il nostro changelog conterrà qualcosa di simile a quanto segue:
Ora applichiamo le modifiche al database, tornando alla schermata del plugin JPA Buddy e selezionando l’icona corrispondente all’update.
Ci verrà richiesta la connessione del database da aggiornare. Ovviamente, il database dev’essere presente (anche se vuoto). Provvediamo quindi a crearlo prima di effettuare questa operazione.
Dopo l’aggiornamento, vedremo un messaggio di successo.
Se ora modifichiamo le entità del nostro progetto, sarà sufficiente generare un changelog di differenza dal plugin JPA, come si vede nella schermata seguente.
Grazie per aver seguito questo piccolo tutorial, se hai ancora “sete” di tech-pills non perderti nemmeno un argomento del nostro blog!