当前位置: 首页 > backend >正文

SpringBoot项目使用Liquibase 数据库版本管理

数据库版本管理


概述

Liquibase 是一个用于数据库重构、变更管理和版本控制的开源工具。它通过对数据库变更进行版本化管理,支持多人协作开发、多分支合并,并提供多种数据库类型的支持。

特点

  • 多数据库支持:MySQL、PostgreSQL、Oracle、SQL Server、DB2、H2等
  • 多格式变更日志:XML、YAML、JSON、SQL
  • 上下文执行逻辑:支持按需运行特定上下文变更
  • 集群安全更新:确保分布式环境下的数据库更新安全
  • 变更文档生成:自动生成数据库修改文档(HTML格式)
  • 数据库对比:使用命令对比两个数据库结构差异
  • 多平台集成:支持命令行、Ant、Maven及应用程序内嵌

集成步骤

1. 添加依赖

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

2. 创建目录结构

在项目 resources 目录下创建 liquibase 目录用于存放 liquibase 相关的配置文件,在 liquibase 目录下创建 changelog 目录存放所有 changelog 文件

src/main/resources/└── liquibase/├── master.xml└── changelog/├── common/│   ├── master.xml│   └── 20230110_common_init_table.sql└── other_module/

3.创建master.xml文件

liquibase 目录下的 master.xml 为 liquibase 的入口,通过 include 标签将其它的 master.xml文件引入进来。

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"><!--1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。--><include file="liquibase/changelogs/common/master.xml"/></databaseChangeLog>

具体模块的master.xml

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"><!--1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。--><changeSet id="liquibase/20230110_common_init_table.sql" author="xxxx"><sqlFile path="liquibase/20230110_common_init_table.sql"/></changeSet></databaseChangeLog>

id:执行id,执行文件名称

4. 应用配置

指定 liquibase 的 changelog文件

spring:liquibase:enabled: false # 是否启用change-log: classpath:/liquibase/master.xml 

changelog文件命名规则

文件名称:日期_说明_data/table.xml

注意事项

初始化顺序问题

问题描述:

@PostConstruct注解的方法会在Liquibase之前执行,如果这些方法需要访问数据库,会导致错误。

解决方案:

使用CommandLineRunner或ApplicationRunner接口替代@PostConstruct

http://www.xdnf.cn/news/18916.html

相关文章:

  • C#编译错误:CS1056 意外字符
  • vsgCs显示谷歌全球倾斜模型-节点
  • 第八章:《性能优化技巧》——深入讲解预分配容量、移动语义、避免频繁拼接等优化策略,以及C++17的`string_view`如何减少拷贝开
  • vxetable数据导出
  • UGUI源码剖析(13):交互的基石——Selectable状态机与Button事件
  • Kafka 4.0 五大 API 选型指南、依赖坐标、上手示例与最佳实践
  • 项目实战4:TrinityCore框架学习
  • 科技守护古树魂:古树制茶行业的数字化转型之路
  • 把llamafacoty微调后的模型导出ollama模型文件
  • 【前端教程】JavaScript入门核心:使用方式、执行机制与核心语法全解析
  • Oracle 数据库权限管理的艺术:从入门到精通
  • 目标检测领域基本概念
  • 第6篇:链路追踪系统 - 分布式环境下的请求跟踪
  • JSP程序设计之JSP指令
  • 【Python】QT(PySide2、PyQt5):Qt Designer,VS Code使用designer,可能的报错
  • Java学习笔记之——通过分页查询样例感受JDBC、Mybatis以及MybatisPlus(一)
  • 上海控安:汽车API安全-风险与防护策略解析
  • Java 实现HTML转Word:从HTML文件与字符串到可编辑Word文档
  • Nginx + Certbot配置 HTTPS / SSL 证书(简化版已测试)
  • 机器视觉学习-day07-图像镜像旋转
  • 【Deepseek】Windows MFC/Win32 常用核心 API 汇总
  • 【PyTorch】基于YOLO的多目标检测项目(一)
  • 【Redis】数据分片机制和集群机制
  • 【Java SE】基于多态与接口实现图书管理系统:从设计到编码全解析
  • C/C++---前缀和(Prefix Sum)
  • 微服务的编程测评系统17-判题功能-代码沙箱
  • MQTT broker 安装与基础配置实战指南(一)
  • 题目—移除元素
  • PyTorch中的激活函数
  • AI需求优先级:数据价值密度×算法成熟度