【问题标题】:How to run Grails Database Migration after startup启动后如何运行 Grails 数据库迁移
【发布时间】:2015-12-28 02:33:37
【问题描述】:

对于我的集成测试,我在 bootstrap.groovy 中加载了一个“种子”数据库。 我也在开发过程中不时手动加载不同的数据库来尝试不同的场景。

麻烦的是,数据库迁移插件(非常感谢 Bert!)似乎只在启动期间运行,在进入引导代码之前,我看不到任何可以触发它再次运行的地方。

这意味着如果我加载一个“过时”的数据库,那么我必须关闭应用程序并重新启动它才能完成迁移。然后我必须记住拍摄“新”数据库的快照,这样我下次就不必再这样做了。

所有这些都会真正影响生产力,尤其是在多次重构中。

有没有更好的方法来做到这一点?理想情况下,我想要服务类方法'runMigrations()'或其他东西。然后我可以在加载工具之后或从我的引导代码中调用它。

有什么想法吗?

【问题讨论】:

  • 迁移并非设计为在启动后运行。它们被设计为在启动前运行,因为在启动应用程序之前需要模式正确。您将需要使用其他工具来完成此操作。

标签: grails database-migration


【解决方案1】:

这是可能的,在我看来这是一个有效的用例,例如在应用程序启动后运行特定的上下文:

import grails.plugin.databasemigration.MigrationUtils
import liquibase.Liquibase

class DatabaseMigrationService {

  def runMigrationsForContexts(String contexts) {
    def database = MigrationUtils.getDatabase()
    Liquibase liquibase = MigrationUtils.getLiquibase(database)
    liquibase.update(contexts)
  }
}

【讨论】:

    【解决方案2】:

    保罗,

    根据我自己的个人经验,我从未见过迁移插件在启动后运行。我不相信它被编码来做到这一点。在切换数据库时,我的处境与您相似,我只需要不断停止和启动应用程序。

    对不起!

    【讨论】:

    • 在网上搜索了几天后,我得出了相同的结论,但我不禁感到,因为 Liquibase 是一个单独的应用程序,dbmigration 插件“简单地”调用它应该可以随意调用它,可以这么说。我想我们需要 Bert 的意见......
    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2017-01-08
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多