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:

  1. Come integrare migrate comando nella mia run-app grails ?
  2. 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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top