如何在 spring 启动基于 maven 的项目中引入 liquibase

How to introduce liquibase in midle of spring boot maven based project

`我已经 运行ning 项目并试图在项目中间引入 liquibase。 这是 spring 基于 maven 的启动项目。

我正在按照步骤进行。

1.liquibase.properties

url=jdbc:postgresql://localhost:5432/cc
username=postgres
password=deadline123
driver=org.postgresql.Driver
outputChangeLogFile=src/main/resources/db/changelog/db.changelog-master.yaml
runOnChange=true
referenceUrl=jdbc:postgresql://localhost:5432/cc
referenceUsername=postgres
referencePassword=deadline123
changelogFile=src/main/resources/db/changelog/db.changelog-master.yaml
diffChangeLogFile=src/main/resources/diff.yaml
  1. 运行 命令生成当前数据库状态的变更日志 mvn liquibase:generateChangeLog
  2. 然后运行命令同步更新日志并在数据库中创建条目 mvn liquibase:changelogSync
  3. 正在启动我的应用程序,但它抛出的错误关系已经存在。我不明白为什么 liquibase 正在执行已经执行的变更集?我正在使用 liquibase 4.6.3

Liquibase 不会将更改与您的实际 table 进行比较,它只会跟踪已经执行的更改集(它会为名为 databasechangelog 的那个创建另一个 table) .

话虽如此,您必须确保 liquibase 以 'if anything fails, mark it as executed' 为前提条件执行您的变更集。可以这样实现:

<preconditions onFail="MARK_RAN">
    <not>
        <tableExists tableName="person"/>
    </not>
</preconditions>

此示例以及更多信息可以在 https://www.liquibase.com/blog/adding-liquibase-on-an-existing-project

上找到

问题出在文件路径 src/main/resources/db/changelog/db.changelog-master.yaml

liquibase:changelogSync 在日志同步中添加文件路径,liquibae 在启动时实际上需要 classpath classpath:/db/changelog/db.changelog-master.yaml