2009-11-26 34 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脚本并复制它们的功能会更容易。它们很简单,你可以更深入地了解发生的事情。

相关问题