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

时间:2016-12-21 21:35:50

标签: command-line spring-boot liquibase

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

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

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

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在命令行和应用程序启动运行之间可以互操作?

提前致谢
多米尼克

1 个答案:

答案 0 :(得分:0)

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