Spring Boot 中的 Liquibase – 开发者指南

发布: (2026年3月10日 GMT+8 16:05)
3 分钟阅读
原文: Dev.to

Source: Dev.to

什么是 Liquibase 以及它为何重要

Liquibase 本质上是数据库模式的 Git。与手动运行 SQL 脚本并希望每个人都正确执行不同,你可以用结构化格式定义变更,Liquibase 会跟踪哪些已经被应用。

示例 XML Changeset



    
        
    

Liquibase 在名为 DATABASECHANGELOG 的表中记录已执行的迁移,确保:

  • 变更只会被应用一次
  • 保持执行顺序
  • 可以回滚

关键优势

  • 环境一致 – 开发、预发布和生产保持同步
  • 迁移历史 – 查看谁在何时做了哪些修改
  • 自动迁移 – Spring Boot 可以在启动时自动执行
  • 回滚 – 如有需要,可安全撤销变更

在 Spring Boot 中配置 Liquibase

Maven 依赖

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

Gradle 依赖

implementation 'org.liquibase:liquibase-core'

Spring Boot 会自动检测 Liquibase 并运行迁移。

配置 (application.yml)

spring:
  liquibase:
    change-log: "classpath:/db/changelog/changelog.xml"
    contexts: "dev"

典型项目结构

src/main/resources
 └─ db
    └─ changelog
        └─ changelog.xml

编写迁移

完整 XML Changelog 示例 (changelog.xml)



    
        
            
                
                    
                
                
                    
                    
                
            

            
                
                    
                
            

            
                
                    
                
                
                    
                
            

            
                
                    
                    
                
            

格式化 SQL Changeset 示例

-- liquibase formatted sql
-- changeset dev:create-users
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP
);

-- changeset dev:add-email-index
CREATE INDEX idx_users_email ON users(email);

-- changeset dev:add-phone-column
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20);
-- rollback: ALTER TABLE users DROP COLUMN phone_number;

最佳实践

  • 绝不编辑已执行的迁移 – 迁移是不可变的。
  • 一个 changeset = 一个变更 – 保持每个 changeset 专注(例如单表、单列或单索引)。
  • 给文件编号,如果使用多个文件,以避免 Git 冲突。
  • 本地测试 – 删除数据库,运行应用,确保迁移能够从零开始成功。
  • 生产环境要小心 – 在大表上避免使用 ALTER COLUMN TYPEDROP COLUMN 或在未做好规划的情况下添加 NOT NULL 约束。

功能对比

功能LiquibaseFlyway
XML/YAML/JSON
SQL
回滚limited

Flyway 更简洁,但 Liquibase 为企业级部署提供了更大的灵活性。

结论

Liquibase 是保持各环境数据库模式一致的救星。遵循以下黄金法则:

  • 不可变的迁移
  • 每个 changeset 只做一件事
  • 本地测试迁移

感谢阅读!

0 浏览
Back to Blog

相关文章

阅读更多 »

Java 中的 Two Sum 问题

Two‑Sum问题 – Java中的不同实现 方法 Two‑Sum问题是开发者面试中最常见的问题之一。给定一个整数数组…