Come integrare una migrazione Liquibase nella mia build grails?
Domanda
Ho una migrazione Liquibase che eseguo manualmente per caricare i dati di seed da diversi file CSV nel mio database. Vorrei eseguire questa migrazione ogni volta che eseguo grails run-app
.
Penso di avere due domande in una:
- Come integrare
migrate
comando nella miarun-app grails
? - Come posso cancellare il
DATABASECHANGELOG
per permettermi di eseguire lo stesso migrazione ancora e ancora?
Oppure, c'è un modo migliore per caricare molti dati in un DB da file CSV?
Soluzione
Domanda 1 - Per integrare il comando migrate in run-app, dovresti ascoltare gli eventi lanciati negli script di run-app. Questo è spiegato qui e un l'articolo più completo è qui .
Domanda 2 - Per cancellare il database, forse puoi scrivere una migrazione che cancella il db per te? Il modo in cui lo faccio è usare una piccola sceneggiatura che ho scritto che lascia cadere e crea un db. È per MySQL:
target(dropdb: "The description of the script goes here!") {
def x = 'mysql -u root --password=XXXX -e "drop database yourdb; create database yourdb default character set utf8; " '.execute();
x.waitFor()
println "Exit Value ${x.exitValue()}"
}
setDefaultTarget(dropdb)
Altri suggerimenti
Domanda n. 2: se hai particolari ChangeSet che vuoi eseguire ogni volta, c'è un " alwaysRun " attributo che puoi impostare sul tag changeSet.
Per i miei soldi, è più facile leggere gli script di Liquibase Gant e replicare ciò che fanno. Sono semplici e avrai più informazioni su ciò che sta accadendo.
Dovresti usare il plug-in autobase . Eseguirà le migrazioni all'avvio dell'applicazione.
Ha uno script per convertire da un log delle modifiche xml in uno groovy, quindi non è necessario convertirlo manualmente.