我在使用Liquibase变更集上下文在我的Grails应用程序中很好地运行时遇到了问题。我有一组变更集,我只想在“测试”上下文中运行。但是,它们每次都在执行。我想我有配置问题。
Liquibase文档声明您只需将context =“test”属性添加到changeSet即可。对于我的概念验证测试,我将创建一个我希望在Test上插入的Patient记录的插入,但不是在我的本地开发环境中。我的变更集添加了上下文:
<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']
在最后一行中,据我所知,我告诉databasemigration插件将“开发”上下文设置为'development',因此当Liquibase执行时,它不应该在上面运行我的变更集,因为它是在'测试'背景。
然而,当我运行应用程序时,我的变更集已执行。我在设置中拙劣或错过了什么?
答案 0 :(得分:0)
我敢打赌,最后一个配置行没有达到预期效果。
根据http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/3%20Configuration.html的“多个数据源示例”部分,此语法用于多个数据源。因此,在您的情况下,updateOnStartContexts
参数将应用于您显然没有的名为dataSource_development
的数据源...
您可以尝试以下方式:
environments {
development{
grails.plugin.databasemigration.updateOnStartContexts = ['development']
}
}