【问题标题】:Liquibase contexts with Grails使用 Grails 的 Liquibase 上下文
【发布时间】:2013-10-04 15:54:07
【问题描述】:

我在让 Liquibase 变更集上下文在我的 Grails 应用程序中正常运行时遇到问题。我有一组变更集,我只想在“测试”上下文中运行。但是,它们每次都在执行。我想我有一个配置问题。

Liquibase 文档指出您只需将 context="test" 属性添加到您的更改集。对于我的概念验证测试,我将创建一个我想在测试中插入的患者记录的插入,而不是在我的本地开发环境中。我的变更集添加了上下文:

<changeSet id="v1.1-garbage-1" author="Eric" context="test">
    <insert tableName="patient">
        [...]
    </insert>
</changeSet>

然后在我的 DataSource.groovy 文件中定义我的环境:

environments {
  development {
    dataSource {
        dbCreate = "create" 
        jndiName = "java:comp/env/jdbc/mydatabasename"
    }
  }
  test {
    dataSource {
        dbCreate = "create"
        url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
    }
  }
[...]

所以我有两个环境,开发和测试。然后在我的 Config.groovy 中,我将 Grails 数据库迁移插件设置为只有上下文“开发”(对于这个概念证明):

// Database Migration plugin
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.xml']
grails.plugin.databasemigration.autoMigrateScripts = ['RunApp', 'TestApp']
grails.plugin.databasemigration.changelogFileName = "changelog.xml"
grails.plugin.databasemigration.development.updateOnStartContexts = ['development']

据我了解,在最后一行中,我告诉数据库迁移插件将“开发”上下文设置为“开发”,因此当 Liquibase 执行时,它不应该运行我上面的变更集,因为它是在“测试”上下文。

然而,当我运行应用程序时,我的变更集被执行了。我在设置中搞砸或遗漏了什么?

【问题讨论】:

    标签: grails liquibase


    【解决方案1】:

    我敢打赌,最后一个配置行没有按照您的预期进行。

    根据http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/3%20Configuration.html 的“多数据源示例”部分,此语法用于多数据源。因此,在您的情况下,updateOnStartContexts 参数将应用于名为 dataSource_development 的数据源,您显然没有...

    您可以尝试以下方法吗:

    environments {
        development{
            grails.plugin.databasemigration.updateOnStartContexts = ['development']
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      相关资源
      最近更新 更多