liquibase 集成在命令行和应用程序之间不可互操作

liquibase integration not interoperable between command line and application

我使用 liquibase 已有好几年了,作为应用程序开发人员,它对我同步源代码和数据库非常有帮助,因此感谢此工具的所有贡献者。

在我的日常工作中,我通常从命令行启动 liquibase 以测试变更集和数据库操作。如果一切连接正确,我将启动我的应用程序(Spring 启动),应用程序中的 liquibase 设置会执行所有这些同步步骤。这些设置工作完美,除非我的变更日志文件包含带有 loaddata 的变更集,以便将 CSV 文件中的数据填充到数据库中。每个应用程序启动失败 liquibase.exception.ValidationFailedException: Validation Failed: change sets check sum

原因似乎是 loaddata 中提到的作为校验和计算一部分的 CVS 文件的不同文件位置。如果从应用程序开始,变更集如下所示:

classpath:liquibase/changelog.xml: classpath:liquibase/changelog.xml::loadDefaultRolePermissions::dominik

但如果从命令行启动,则无法使用类路径资源,变更集信息看起来像这样

liquibase: src/main/resources/liquibase/changelog.xml: src/main/resources/liquibase/changelog.xml::loadDefaultRolePermissions::dominik

两个值不同并导致不同的校验和。

如果您查看 liquibase.integration.commandline.Main.java,没有使用类路径资源访问器:

FileSystemResourceAccessor fsOpener = new FileSystemResourceAccessor();
CommandLineResourceAccessor clOpener = new CommandLineResourceAccessor(classLoader);
CompositeResourceAccessor fileOpener = new CompositeResourceAccessor(fsOpener, clOpener);

来自 liquibase.integration.commandline.Main.java

有没有办法让 liquibase 在命令行和应用程序启动之间互操作运行?

提前致谢
多米尼克

已通过从 liquibase 3.3.1 更新到 3.5.3 解决