很难在您的代码分支中共享单个数据库实例。如果您尝试在多个开发人员之间共享数据库,则会导致相同类型的问题。
Liquibase旨在将基于文件的变更集用作数据库更改的主记录。专用表DATABASECHANGELOG旨在跟踪哪些变更集已应用于数据库实例。分支之间的切换导致的混乱中很多无法预测的方式,例如:
- 缺少的变更
- 变更其内容发生了变化(信息,以校验和错误)。
- ...
最好的建议是刷新或重新同步的数据库,只要你分支之间切换:
liquibase dropAll
liquibase update
在你的情况下,第二操作为liquibase的servlet probabily不必要的会在启动时更新数据库。
如果您担心丢失数据,请使用contexts来控制测试数据。
更新
如果你使用Maven的这个 “再同步” 操作可以从Maven的如下叫:
mvn -Presync compile
此配置文件的POM中配置如下:
<profile>
<id>resync</id>
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.plugin.version}</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<url>${liquibase.url}</url>
<driver>${liquibase.driver}</driver>
<username>${liquibase.username}</username>
<password>${liquibase.password}</password>
<changeLogFile>${liquibase.changeLogFile}</changeLogFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<goals>
<goal>dropAll</goal>
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
你有一个数据库和许多分支机构?或者它是一个临时数据库,每个测试运行都有新的数据库? – yegor256 2012-04-20 15:50:54
我想你需要a)每个分支一个DB b)每个分支一个更新日志。为多个分支维护单个更新日志竟然是错误倾向 – 2012-04-20 15:52:51
我有一个每个分支的更改日志,并且只有一个数据库实例,所以我不需要多个数据库,因为我是唯一的开发人员。 – user979051 2012-04-20 16:15:33