Java 液化自动回滚
我正在处理一个分支,例如,需要删除表X中的一列,我添加了一个更改及其对该特定分支的好处,然后我切换到另一个仍然需要该列的分支,该更改需要回滚。从一个分支到另一个分支,对db有很多类似的更改 我为每个分支添加了一个新的changelogxml,并将其包含在主changelogxml中。显然,当我切换到另一个分支时,上一个分支的changlog xml不再在工作区中,并且liquibase不会将实际更改集仅保存在数据库中,而只保存其名称和应用时的更改集,因此它将无法自动回滚更改 我正在使用Liquibase Servlet在应用程序启动时应用更改Java 液化自动回滚,java,liquibase,Java,Liquibase,我正在处理一个分支,例如,需要删除表X中的一列,我添加了一个更改及其对该特定分支的好处,然后我切换到另一个仍然需要该列的分支,该更改需要回滚。从一个分支到另一个分支,对db有很多类似的更改 我为每个分支添加了一个新的changelogxml,并将其包含在主changelogxml中。显然,当我切换到另一个分支时,上一个分支的changlog xml不再在工作区中,并且liquibase不会将实际更改集仅保存在数据库中,而只保存其名称和应用时的更改集,因此它将无法自动回滚更改 我正在使用Liqui
液化专家们,这个问题有没有一个简单的解决方案?谢谢大家! 很难跨代码的分支共享单个数据库实例。如果您尝试在多个开发人员之间共享数据库,则会导致类似的问题 Liquibase旨在使用基于文件的变更集作为数据库变更的主记录。特殊表DATABASECHANGELOG用于跟踪已应用于数据库实例的变更集。在分支之间切换会以许多不可预知的方式造成混乱,例如:
- 缺少变更集
- 内容已更改的变更集(导致校验和错误)
liquibase dropAll
liquibase update
在您的情况下,第二个操作可能是不必要的,因为liquibase servlet将在启动时更新数据库
如果您担心数据丢失,请使用来控制测试数据
更新
如果您使用的是Maven,可以从Maven调用此“重新同步”操作,如下所示:
mvn -Presync compile
<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>
此配置文件在POM中配置如下:
mvn -Presync compile
<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>
重新同步
org.liquibase
liquibase maven插件
${liquibase.plugin.version}
过程资源
${liquibase.url}
${liquibase.driver}
${liquibase.username}
${liquibase.password}
${liquibase.changeLogFile}
假的
滴落球
更新
您有一个数据库和多个分支?或者它是一个临时数据库,每次测试都是新的?我想你需要a)每个分支一个数据库b)每个分支一个变更日志。为多个分支维护单个变更日志结果是错误的。每个分支都有一个变更日志,所有分支都只有一个数据库实例,我不需要多个数据库,因为我是唯一的开发人员。@user979051:如果您有多个分支,您确实需要多个数据库。其他任何事情都会给你带来麻烦(这就是你为什么贴出这个问题的原因)