我有一個Liquibase遷移,我手動運行從多個CSV文件加載種子數據到我的數據庫。我希望在每次運行grails run-app
時運行此遷移。如何將Liquibase遷移集成到我的Grails構建中?
我想我有一兩個問題:
- 如何我整合
migrate
命令到我grails run-app
? - 如何清除
DATABASECHANGELOG
以允許我一遍又一遍運行相同的 遷移?
或者,有沒有更好的方法來從CSV文件中加載大量數據到數據庫?
我有一個Liquibase遷移,我手動運行從多個CSV文件加載種子數據到我的數據庫。我希望在每次運行grails run-app
時運行此遷移。如何將Liquibase遷移集成到我的Grails構建中?
我想我有一兩個問題:
migrate
命令到我grails run-app
?DATABASECHANGELOG
以允許我一遍又一遍運行相同的 遷移?或者,有沒有更好的方法來從CSV文件中加載大量數據到數據庫?
問題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)
您應該使用autobase plugin。它將在應用程序啓動時運行你的遷移。
它有一個腳本可以從xml changelog轉換爲groovy,所以你不必手動轉換它。
它很有幫助,知道Autobase是圍繞Liquibase提供的一個輕量級Groovy包裝,它爲比XML文件更靈活的變更集提供了靈活的DSL :-) – 2009-11-27 05:55:15
問題#2:如果您有特定changeSet您想每次都運行,您可以在changeSet標記上設置一個「alwaysRun」屬性。
對於我的錢來說,閱讀Liquibase Gant腳本並複製它們的功能會更容易。它們很簡單,你可以更深入地瞭解發生的事情。
很好的答案,並感謝您的鏈接。 – 2009-11-30 15:58:04