对于我的集成测试,我在bootstrap.groovy中加载了一个'seed'数据库。 我还会在开发过程中不时手动加载不同的数据库,以尝试不同的场景。
麻烦的是,数据库迁移插件(非常感谢Bert!)似乎只是在启动期间运行,在获取引导代码之前我无法看到任何地方我可以触发它再次运行。
这意味着如果我加载一个“过时”的数据库,那么我必须关闭应用程序并重新启动它才能完成迁移。然后我必须记得拍摄“新”数据库的快照,这样下次我就不用再做了。
所有这些都真正提高了生产力,特别是在多次重构中。
有更好的方法吗?理想情况下,我喜欢服务类方法'runMigrations()'或其他东西。然后我可以在我的加载工具之后或在我的引导代码中调用它。
有什么想法吗?
答案 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)
根据我个人的经验,我从未见过迁移插件在启动后运行。我不相信它是这样编码的。我和你在哪里切换数据库时一直处于类似的位置,我只需要继续停止并启动应用程序。
抱歉!