Liquibase 数据库变更管理快速上手指南从第一次 update 到读懂整个仓库【免费下载链接】liquibaseMain Liquibase Source项目地址: https://gitcode.com/GitHub_Trending/li/liquibase如果你的建表、改字段全靠口口相传的 SQL 脚本Liquibase 数据库变更管理工具大概率能帮你省掉不少加班。它把每次数据库结构改动写成带版本号的变更日志changelog即按顺序登记的数据库变更记录文件自动排序执行、记录执行历史出错了还能回滚。这个仓库就是 Liquibase 社区版的主源码读这篇指南你会知道它解决什么问题、怎么第一次跑起来、代码长在哪里、配置该怎么写。1. Liquibase 到底解决什么问题想象一个多人项目张三加了个字段李四删了张表两边的脚本谁先跑、谁后跑全靠约定。生产环境上一旦顺序错了就是事故。一句话定位Liquibase 是一个数据库版本控制工具它把你要做什么改动写进 changelog由它决定执行顺序并往数据库里记一张执行历史表。每个库跑过哪些变更、跑没跑过一查便知。它带来的直接好处变更可重复同一个 changelog 在开发、测试、生产环境跑出一致的结果顺序自动管理不用人工保证脚本先后关系可回滚改错了能退回到上一个版本点可协作changelog 是普通文本文件进代码库就能走正常评审流程为什么不用 Git 直接管 SQL 文件Git 只管文件变没变不管数据库里实际跑到哪一步。Liquibase 补上的是运行时那一环它记住每个库的执行进度缺什么补什么多跑了会告诉你。两者配合才是完整的数据库版本控制工具方案。2. 第一次跑起来两条路把 Liquibase 转起来想先感受它怎么工作有两条路按你的习惯选。路径一Docker 方式10 分钟看到结果仓库里就带了一个完整的演示环境见 docker/examples/docker-compose/。它同时拉起一个 PostgreSQL 15 和一个 Liquibase 容器数据库就绪后Liquibase 自动挂载 changelog 目录和 liquibase.properties执行update命令。大致流程是克隆仓库需要源码时git clone https://gitcode.com/GitHub_Trending/li/liquibase进入docker/examples/docker-compose用 docker compose 启动该目录下的编排文件观察 Liquibase 容器日志它读主日志、按 include 顺序执行变更集、把执行记录写进历史表启动完连上数据库看一眼users表和示例数据都在这就是 Liquibase 跑通的最小闭环。路径二CLI 内存数据库不装任何数据库不想起容器可以用官方 README 里的 H2 内存库示例全部四步下载发行包并把 Liquibase 加进 PATH启动内置 H2 库liquibase init start-h2执行liquibase update验证liquibase history能看到已执行的变更清单想从源码构建认准 Maven这个仓库是标准 Java Maven 多模块工程要求 JDK 17。仓库根目录带了 mvnw 包装器脚本没装 Maven 也能用./mvnw package一条命令构建全部模块最终的可分发产物由 liquibase-dist/ 模块打包含启动脚本 liquibase-dist/src/main/archive/lib/liquibase 等文件。开发向的细节都在 DEVELOPING.md 里比如测试为什么用 Spock 写、怎么让集成测试去连各种数据库。3. 读懂这个仓库看代码前先看哪几处仓库不小但入口很集中。别从第一行代码读起先按下面的顺序看。模块地图谁负责什么根 pom.xml 声明了全部模块各自分工如下模块 / 目录职责liquibase-core/核心模块对外 API 与扩展点SPI所在liquibase-standard/主力实现changelog 解析、命令、快照、SQL 生成全在这liquibase-cli/命令行入口liquibase-maven-plugin/Maven 插件让mvn liquibase:update可用liquibase-dist/发行包打包zip/deb/rpm、启动脚本、许可证liquibase-integration-tests/多数据库集成测试含各库建库 SQLliquibase-extension-testing/测试用 TestSystem 框架按需拉起测试数据库liquibase-snowflake/Snowflake 数据库支持docker/官方 Docker 镜像构建与示例DEVELOPING.md 明确说 liquibase-core 是最核心的模块但日常想看懂一条 update 命令发生了什么翻 liquibase-standard 收获最大。三处值得先翻的目录liquibase-standard/src/main/java/liquibase/ 下的changelog/变更集、include、执行历史服务都在此是理解 Liquibase 数据库变更管理模型的关键同级的command/core/每个 CLI 命令update、history、rollback 等对应的 CommandStep 实现docker/ 的examples/不想读代码时这里的 compose 文件 changelog 就是最好的活文档4. 按你的方式配置核心配置文件各管什么Liquibase 的配置文件分两类一类告诉它连哪个库一类告诉它改什么。liquibase.properties连接与入口以演示用的 liquibase.properties 为例每个键控制的行为如下键控制什么changeLogFile入口 changelog 文件执行从这里开始urlJDBC 连接串指向具体数据库username/password连接凭据driver用哪个 JDBC 驱动类searchPath解析 include 子文件时去哪些路径找命令行参数和环境变量如LIQUIBASE_COMMAND_URL优先级更高所以 CI 里通常用变量注入不落地密码。changelog 三件套主日志、子日志、变更集Liquibase changelog 配置推荐一个主文件 按功能拆子文件的组织方式。演示库里是这样分层的db.changelog-master.xml主日志只做一件事——按顺序 include 子文件001-create-users-table.xml第一个变更集建users表002-insert-sample-data.xml第二个变更集插示例数据每个子文件里的changeSet是最小执行单位带id和author执行过一次后凭指纹跳过不会重复跑。新改动就新增一个文件、在主日志里加一行 include历史文件尽量别动。5. 上手之后常见疑问与下一步新手最常问的几个问题许可证是什么社区版采用 FSLFunctional Source License功能源码许可证可自由用于数据库迁移但不允许拿它做与 Liquibase 产品直接竞争的商业化4.x 老版本则是 Apache 2.0。全文见 LICENSE.txt。报找不到驱动5.0 起社区版默认不再内置数据库驱动需要用 Liquibase 包管理器补装Docker 场景可在镜像里lpm add mysql --global之类地添加细节看 docker/README.md。怎么查一个库执行过什么跑liquibase history或查数据库里的执行历史表每条变更集对应一行记录。改错了怎么退用rollback命令退回到指定标签或时间点这也是 changelog 比裸 SQL 多出来的能力。从源码构建需要什么环境JDK 17 加 Maven没有 Maven 就用仓库里的 mvnw / mvnw.cmd。下一步去哪儿看想改代码或补测试先读 DEVELOPING.md它讲清了模块结构、Spock 测试规范和集成测试框架想定制镜像或上 CI/CDdocker/ 下有各数据库的 Dockerfile 示例aws、postgres、mssql 等发布流程参考 RELEASING.txt官方用 CI 流水线做发布前的 dry-run 验证长这样供你设计自己的流水线时参考跑通一次update、看懂自己的 changelog 三件套你就已经站在了数据库版本控制工具的正确用法上。剩下的就是让团队的每一次数据库改动都从此有据可查。【免费下载链接】liquibaseMain Liquibase Source项目地址: https://gitcode.com/GitHub_Trending/li/liquibase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考