2009-11-26 66 views
2

我有一個Liquibase遷移,我手動運行從多個CSV文件加載種子數據到我的數據庫。我希望在每次運行grails run-app時運行此遷移。如何將Liquibase遷移集成到我的Grails構建中?

我想我有一兩個問題:

  1. 如何我整合migrate 命令到我grails run-app
  2. 如何清除DATABASECHANGELOG 以允許我一遍又一遍運行相同的 遷移?

或者,有沒有更好的方法來從CSV文件中加載大量數據到數據庫?

回答

3

問題1 - 要將遷移命令集成到run-app中,您應該監聽在run-app腳本中引發的事件。這解釋了here,更完整的文章是here

問題2 - 對於清除數據庫,也許你可以編寫一個遷移來清除你的數據庫?我這樣做的方式是使用我寫的一個小腳本,它會刪除並創建一個數據庫。它適用於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) 
+0

很好的答案,並感謝您的鏈接。 – 2009-11-30 15:58:04

1

您應該使用autobase plugin。它將在應用程序啓動時運行你的遷移。

它有一個腳本可以從xml changelog轉換爲groovy,所以你不必手動轉換它。

+2

它很有幫助,知道Autobase是圍繞Liquibase提供的一個輕量級Groovy包裝,它爲比XML文件更靈活的變更集提供了靈活的DSL :-) – 2009-11-27 05:55:15

1

問題#2:如果您有特定changeSet您想每次都運行,您可以在changeSet標記上設置一個「alwaysRun」屬性。

1

對於我的錢來說,閱讀Liquibase Gant腳本並複製它們的功能會更容易。它們很簡單,你可以更深入地瞭解發生的事情。

相關問題