You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Liquibase生成仅含新增变更的多changeSet文件?

Liquibase生成仅含新增变更的独立ChangeSet文件方法

要让liquibase-maven-plugin只生成新增的数据库变更(而非全量历史实体),可以通过以下几种方式实现:

1. 基于基准变更日志的差异对比

  • 首先生成初始全量变更日志作为基准:
    mvn liquibase:generateChangeLog -Dliquibase.outputChangeLogFile=src/main/resources/db/changelog/initial-changelog.xml
    
  • 后续每次需要生成新增变更时,使用diffChangeLog命令对比当前实体与基准日志的差异,输出独立的新增变更文件:
    mvn liquibase:diffChangeLog \
      -Dliquibase.referenceChangelog=src/main/resources/db/changelog/initial-changelog.xml \
      -Dliquibase.outputChangeLogFile=src/main/resources/db/changelog/v1.1-new-changes.xml
    
  • 生成的v1.1-new-changes.xml仅包含自基准日志以来的新增/修改变更,不会重复历史实体。
  • 每次完成变更后,记得将新增的变更文件通过<include>标签加入主变更日志,同时可以选择更新基准日志或保留版本化基准。

2. 基于数据库快照的差异对比

  • 先生成初始数据库快照作为基准状态:
    mvn liquibase:snapshot -Dliquibase.outputFile=src/main/resources/db/snapshot/initial-snapshot.json
    
  • 后续生成新增变更时,对比当前数据库与基准快照的差异:
    mvn liquibase:diffChangeLog \
      -Dliquibase.referenceUrl=offline:mysql?snapshot=src/main/resources/db/snapshot/initial-snapshot.json \
      -Dliquibase.outputChangeLogFile=src/main/resources/db/changelog/v1.2-new-changes.xml
    
  • 这种方式适合不想维护基准变更日志的场景,直接通过快照文件记录数据库的历史状态。

3. 实用建议

  • 为每个独立变更文件设置唯一的id、author属性,同时采用版本化文件名(如v1.0-init.xml、v1.1-add-user-table.xml),方便追溯历次变更。
  • 每次生成新变更文件后,务必在主变更日志中通过<include>引入,避免执行时遗漏变更。

内容的提问来源于stack exchange,提问作者TaixMiguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:04:57