首页 > 解决方案 > Spring Boot 无法识别 mvn liquibase cli-changes,反之亦然

问题描述

我遇到了 spring boot 和 mvn liquibase 的问题。当我提交更改时,我可以通过 Tag 更新和回滚 liquibase

mvn liquibase:update

并回滚它们

mvn liquibase:rollback -Dliquibase.rollbackTag=0.0.0 

不幸的是,当我使用 liquibase:update 提交更改时,我无法启动我的 Spring Boot 应用程序。

org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class] 中定义名称为“liquibase”的 bean 创建错误:调用 init 方法失败;嵌套异常是 liquibase.exception.MigrationFailedException:更改集类路径迁移失败:db/changelog/changelog-0.0.1.xml::0.0.1::

这告诉我 spring boot 尝试再次运行变更集。

当我查看 databasechangelog 表时,存在具有不同部署 ID 的重复条目,这可能是问题吗?

这是屏幕截图

Ps:当我让 Spring Boot 进行更新时,我可以运行应用程序,但我无法通过 CLI 回滚 :(

这是我在 pom.xml 中的配置

    <plugins>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>3.6.3</version>

            <configuration>
                <driver>org.postgresql.Driver</driver>
                <url>connection/url>
                <username>user</username>
                <password>password</password>
                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                <rollbackTag>0.0.0</rollbackTag>
                <changeLogFile>destination of rollback file</changeLogFile>
            </configuration>
        </plugin>
    </plugins>
</build>

在 application.properties

spring.liquibase.change-log=classpath:db/changelog-master.xml spring.liquibase.test-rollback-on-update=true

我猜更改日志文件的标记是正确的,因为它在 CLI 中也不起作用。

谢谢你。

标签: mavenspring-bootliquibase

解决方案


我猜maven中的类路径与springboot应用程序中的类路径不同。Liquibase 计算类路径并将其存储在 db 的某个属性中(我不知道它的名称)。因此,当您使用 maven 准备数据库,然后运行您的应用程序时,文件的路径是不同的,因此对于 liquibase,这意味着类似于新的更改日志文件。

您可以通过向logicalFilePath所有更改日志文件添加属性来解决此问题。


推荐阅读