maven - 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 中也不起作用。
谢谢你。
解决方案
我猜maven中的类路径与springboot应用程序中的类路径不同。Liquibase 计算类路径并将其存储在 db 的某个属性中(我不知道它的名称)。因此,当您使用 maven 准备数据库,然后运行您的应用程序时,文件的路径是不同的,因此对于 liquibase,这意味着类似于新的更改日志文件。
您可以通过向logicalFilePath
所有更改日志文件添加属性来解决此问题。
推荐阅读
- matlab - 曲线的旋转、曲线的交点和for循环的应用【浮点比较问题】】
- macos - 工具箱不适用于 Visual Studio for Mac
- javascript - nodejs中日期构造函数中使用的时间格式是什么?
- docker - 如何知道 docker 镜像何时被拉入我的 docker 守护进程
- python - venv 没有在 python/windows 上跨越 subprocess.run?
- node.js - Mongoose:OverwriteModelError:编译后无法覆盖“用户”模型
- python - TypeError: start() 接受 0 个位置参数,但给出了 1 个
- python - Tensorflow - 训练大小和训练值之间存在差异的原因是什么
- python - python - 如何从字符串列表中提取数字以放入python的新列中?
- c++ - 无法读取输入文件。控制台显示“无法打开文件:InFile.tx”