如何在启动后运行Grails数据库迁移

时间:2015-09-30 10:31:12

标签: grails database-migration

对于我的集成测试,我在bootstrap.groovy中加载了一个'seed'数据库。 我还会在开发过程中不时手动加载不同的数据库,以尝试不同的场景。

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

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

所有这些都真正提高了生产力,特别是在多次重构中。

有更好的方法吗?理想情况下,我喜欢服务类方法'runMigrations()'或其他东西。然后我可以在我的加载工具之后或在我的引导代码中调用它。

有什么想法吗?

2 个答案:

答案 0 :(得分: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)
  }
}

答案 1 :(得分:0)

保罗,

根据我个人的经验,我从未见过迁移插件在启动后运行。我不相信它是这样编码的。我和你在哪里切换数据库时一直处于类似的位置,我只需要继续停止并启动应用程序。

抱歉!