Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 液化自动回滚_Java_Liquibase - Fatal编程技术网

Java 液化自动回滚

Java 液化自动回滚,java,liquibase,Java,Liquibase,我正在处理一个分支,例如,需要删除表X中的一列,我添加了一个更改及其对该特定分支的好处,然后我切换到另一个仍然需要该列的分支,该更改需要回滚。从一个分支到另一个分支,对db有很多类似的更改 我为每个分支添加了一个新的changelogxml,并将其包含在主changelogxml中。显然,当我切换到另一个分支时,上一个分支的changlog xml不再在工作区中,并且liquibase不会将实际更改集仅保存在数据库中,而只保存其名称和应用时的更改集,因此它将无法自动回滚更改 我正在使用Liqui

我正在处理一个分支,例如,需要删除表X中的一列,我添加了一个更改及其对该特定分支的好处,然后我切换到另一个仍然需要该列的分支,该更改需要回滚。从一个分支到另一个分支,对db有很多类似的更改

我为每个分支添加了一个新的changelogxml,并将其包含在主changelogxml中。显然,当我切换到另一个分支时,上一个分支的changlog xml不再在工作区中,并且liquibase不会将实际更改集仅保存在数据库中,而只保存其名称和应用时的更改集,因此它将无法自动回滚更改

我正在使用Liquibase Servlet在应用程序启动时应用更改


液化专家们,这个问题有没有一个简单的解决方案?谢谢大家!

很难跨代码的分支共享单个数据库实例。如果您尝试在多个开发人员之间共享数据库,则会导致类似的问题

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:如果您有多个分支,您确实需要多个数据库。其他任何事情都会给你带来麻烦(这就是你为什么贴出这个问题的原因)