我们如何在Grails中迁移/更新数据库模式?

时间:2011-01-31 20:02:24

标签: java orm grails groovy

我们已经与Grails合作了一段时间,我的团队负责人提出了一些关于Grails ORM(GORM)的问题:

  1. 迁移到生产后,我们如何维护数据库架构?
  2. 我们可以使用Grails更新数据库架构吗?
  3. 如果架构已更新,是否会自动反映更改/框架是否会处理此问题?
  4. 是否有任何Grails插件可以让我们更新架构而不会头疼?

3 个答案:

答案 0 :(得分:10)

我最近发布了用于数据库迁移的官方Grails插件 - 请参阅http://grails.org/plugin/database-migration以及http://grails-plugins.github.com/grails-database-migration/docs/manual/index.html处的文档

我正在与Liquibase的作者合作,因此旧的liquibase插件现已弃用,因为它使用最新版本的Liquibase(2.0)并且得到SpringSource的正式支持,所以应该使用新的liquibase插件。有关他的公告,请参阅http://blog.liquibase.org/2011/01/new-standard-liquibase-plugin-grails-database-migration.html

在Grails用户邮件列表(来自http://grails.org/Mailing+lists的注册)或http://grails-plugins.847840.n3.nabble.com/上的新插件论坛上提问使用问题,或直接通过电子邮件发送给作者:)

答案 1 :(得分:4)

  1. 删除生产环境dbCreate中的DataSource.groovy参数 - 这将阻止GORM自动更新数据库架构。

  2. 不确定。使用LiquiBase plugin

  3. GORM可以使用dbCreate='update'执行此操作,但强烈建议不要这样做。例如,如果重命名字段,GORM / LiquiBase永远无法确定您是否必须迁移数据,而不仅仅是删除+创建。

  4. 在一行中:grails db-diff生成LiquiBase的changelog.xmlgrails migrate -Dgrails.env=<whatever environment>将其应用于各自的数据库服务器。

答案 2 :(得分:1)

虽然“自动创建”功能可以让项目启动并运行,但我发现liquibase是使数据库保持最新的最佳方法。有一个grails plugin,我相信在DSL上也正在开展工作。

因此,创建一个基线模式(您可以使用liquibase的generate-changelog)然后通过liquibase进行所有未来的更改,它将为您管理更新,回滚甚至一些数据库互操作。您可以将DataSource.groovy配置设置为验证,如果架构与域配置不匹配,grails将无法启动:

environments {
    development {
        dataSource {
            dbCreate = "validate"

您可能还对liquibase-runner plugin感兴趣,可以在应用程序启动时运行迁移。