跨代码分支共享单个数据库实例很困难。如果您尝试在多个开发人员之间共享数据库,它会导致相同类型的问题。
Liquibase 旨在使用基于文件的变更集作为数据库变更的主记录。特殊表 DATABASECHANGELOG 旨在跟踪哪些变更集已应用于数据库实例。在分支之间切换会以许多不可预知的方式导致混乱,例如:
- 缺少变更集
- 内容已更改的变更集(导致校验和错误)。
- ...
最好的建议是在分支之间切换时刷新或重新同步数据库:
liquibase dropAll
liquibase update
在您的情况下,第二个操作可能是不必要的,因为 liquibase servlet 会在启动时更新数据库。
如果您担心丢失数据,请使用上下文来控制测试数据。
更新
如果您使用 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>