我有一个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