liquibase 在 java + spring app 上从 3.5.3 迁移到 4.8.0

问题描述 投票:0回答:1

美好的一天!

我们有运行 liquibase 的 Java + Spring 应用程序。 目前正在将 liquibase 从 3.5.5 迁移到 4.8.0 版本。 使用下一个SpringLiquibase设置:

private static SpringLiquibase liquibase(Properties properties) throws IOException {
        DataSource dataSource = datasource(properties);
        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setChangeLog(properties.getProperty("liquibase.masterfile","classpath:master.xml"));
        liquibase.setDataSource(dataSource);
        liquibase.setResourceLoader(new DefaultResourceLoader());
        liquibase.setClearCheckSums(true);
        return liquibase;
    }

通过将 ClearCheckSums 设置为 true 我期待像这里这样的行为 https://forum.liquibase.org/t/how-to-recalculate-checksums-without-re-running-the-statements-in-liquibase/5226/4 所以变更集的重新运行不应该发生。 CheckSums 已清理,但无论如何都会重新运行脚本。 我在这里想念什么?

java spring liquibase
1个回答
0
投票

在 Liquibase 中将 ClearCheckSums 设置为 true 意味着 Liquibase 将在下次应用程序启动时重新计算 changelog 文件中所有更改集的校验和。当您想将更改应用到数据库架构但不想执行任何已应用的更改集时,这很有用。

但是,将 ClearCheckSums 设置为 true 并不意味着 Liquibase 将跳过执行已经应用的变更集。如果你想跳过执行已经应用的变更集,你需要将 runOnChange="true" 添加到 changelog 文件中的 changeSet 定义。

例如: ... 使用 runOnChange="true",Liquibase 将仅在其校验和自上次执行后发生更改时才执行此变更集。这意味着如果您更新此变更集中的 SQL,Liquibase 将在下次应用程序启动时重新执行它,即使您将 ClearCheckSums 设置为 true。

因此,要实现不重新运行已经应用的脚本的预期行为,您应该将 ClearCheckSums 设置为 true,并将 runOnChange="true" 添加到您不想不必要地重新运行的任何变更集中。

© www.soinside.com 2019 - 2024. All rights reserved.