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

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.dtcms.com/a/354729.html

相关文章:

  • Day16_【机器学习—KNN算法】
  • IDA Pro 逆向分析快捷键大全及核心用法详解
  • 【Day 35】Linux-Mysql错误总结
  • 微信小程序对接EdgeX Foundry详细指南
  • 导入文件允许合并表格
  • 上海控安:汽车API安全-风险与防护策略解析
  • Elasticsearch数据迁移方案深度对比:三种方法的优劣分析
  • 领悟8种常见的设计模式
  • 74HC595芯片简析
  • OpenCV 基础操作实战指南:从图像处理到交互控制
  • Ubuntu有限网口无法使用解决方法
  • 企业级AI应用场景的核心特征
  • Fluent Bit针对kafka心跳重连机制详解(上)
  • DA14531(Cortex-M0+)之Wake-up Interrupt Controller (WIC)
  • JumpServer开源堡垒机:统一访问入口 + 安全管控 + 操作审计
  • 从0开始搭建一个前端项目(vue + vite + typescript)
  • 第6篇:链路追踪系统 - 分布式环境下的请求跟踪
  • 【STM32】G030单片机的窗口看门狗
  • 从协作机器人到智能协作机器人:工业革命的下一跳
  • Fluent Bit针对kafka心跳重连机制详解(下)
  • KubeBlocks For MySQL 云原生设计分享
  • Logstash数据迁移之mysql-to-kafka.conf详细配置
  • 卷积神经网络(CNN)搭建详解
  • 区块链+隐私计算护航“东数西算”数据安全报告
  • AppScan扫描电脑上的客户端,C/S架构客户端等
  • 深度学习----卷积神经网络实现数字识别
  • RAW API 的 TCP 总结2
  • 数据结构8---排序
  • 鸿蒙OS与Rust整合开发流程
  • 【边缘计算】RK3576算力评估