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

数据库版本控制liquibase liquibase是一个数据库变更的版本控制工具。项目中通过liquibase解析用户编写的liquibase的配置文件,生成sql语句,并执行和记录。执行是根据记录确定sql语句是否曾经执行过,和配置文件里的预判断语句确定sql是否执行。 阅读详情

数据库版本管理


一、概述

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"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
            http://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"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
            http://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 

四、如何 让Liquibase 知道这个变更集,跳过

核心原理是:Liquibase 通过在数据库中维护一个名为 DATABASECHANGELOG 的表来记录所有已经执行过的变更集。你需要手动在这个表中插入一条记录,让它认为这个脚本已经成功执行了。

INSERT INTO DATABASECHANGELOG (
    ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, 
    EXECTYPE, MD5SUM, DESCRIPTION, COMMENTS, LIQUIBASE
)
SELECT 
    'liquibase/data/changelog-test-0.0.3', -- 与 changelog 文件中的 id 属性对应
    'name', -- 与 changelog 文件中的 author 属性对应
    'liquibase/data/master.xml',  -- 注意:这个路径必须与之后Liquibase变更集中指定的路径完全一致
    NOW(), -- 变更集被执行的时间戳
    max_order + 1, -- 一个从 1 开始自增的数字,表示该变更集在本次执行中的顺序
    'EXECUTED', -- 执行类型
    NULL, -- 将MD5SUM设置为NULL,让Liquibase自己计算并更新
    'sqlFile path=liquibase/data/changelog-test-0.0.3.sql',
    '',
    '4.23.0'
FROM (SELECT COALESCE(MAX(ORDEREXECUTED), 0) as max_order FROM DATABASECHANGELOG) as tmp;

五、changelog文件命名规则

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

六、注意事项

1.初始化顺序问题

问题描述:

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

解决方案:

使用CommandLineRunner或ApplicationRunner接口替代@PostConstruct

2.约定

  • 项目采用Liquibase进行数据库操作管理,但不限制本地测试数据。仅要求必要的操作记录到日志文件。
  • DDL语句必须在DML语句之前执行,可通过文件引入顺序来决定执行顺序
  • 语句必须以;号收尾
liquibase介绍 1、Liquibase还是Flyway Flyway和Liquibase都支持专业数据库重构和版本控制所需的所有功能,因此您将始终知道要处理的数据库模式的版本以及它是否与软件版本匹配。两种工具都集成在Maven或Gradle构建脚本中以及Spring Boot生态系统中,因此您可以完全自动化数据库重构。 Flyway使用SQL定义数据库更改,因此您可以定制SQL脚本,使其与基础数据库技术(例如Oracle或PostgreSQL)良好地配合使用。另一方面,使用Liquibase,您可以通过使用XML,YA 阅读详情

相关推荐

SpringBoot集成Liquibase

一、前言 Liquibase 是一个用于跟踪,管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据) 都保存在XML文件中,便于版本控制。 liquibase说白了就是一个将你的数据库脚本转化为xml格式保存起来,其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。 二、SpringBoot集成Liquibase 2.1 导入依赖 maven: <!-- https://mvnrepository.com/artifact/org.liquiba

weixin_44248000的博客 1527

liquibase介绍,liquibase这一篇就够了

核心概念 首先它是用于管理数据库版本的,用于跟踪、管理和应用数据库变化,所以就会有这些概念:版本号,管理的数据,差异比较,版本回滚 它的版本号由开发人员来维护,使用 author + id 它会在你的目标数据库生成一张表 DATABASECHANGELOG 来管理版本 管理的数据最小单元为 changeSet ,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。所以变更日志文件一般不可更改,liquibase也自带校验其是否被变更的操作。 安装 安装本体包很简单,

Arrowarcher的博客 4万+

使用 Liquibase 管理数据库版本 - SpringBoot 2.7 .2 实战基础

Liquibase 具有执行锁,已经执行过的内容不会重复执行。在执行 changeSet 时,由于改动的内容可以通过 Liquibase 提供的标签编写,所以无关具体的数据库产品(MySQL、Oracle 等),Liquibase 底层会根据实际使用的数据库类型转化为对应的 SQL。...

youyacoder的博客 643

【Liquibase】基础概念 + demo实战

liquibase 入门级 理论+实战

Le vent se lève, il faut tenter de vivre 4933

【数据库系列】Liquibase详解及详细使用步骤

Liquibase是一个开源的数据库版本控制工具,旨在帮助开发者和运维团队管理数据库的结构和数据变更。它允许用户以声明性方式定义数据库模式的变化,并能够以可重复的方式应用这些变化。Liquibase支持多种数据库,包括MySQL、PostgreSQL、Oracle、SQL Server等,提供了一种数据库无关的迁移管理方式。

颜淡慕潇 2万+

【微服务】springboot 整合mysql实现版本管理通用解决方案

springboot 自动管理数据库版本升级常用解决方案

congge 8184

springboot集成liquibase

springboot集成liquibase简介官网地址springboot集成依赖application.ymldb.changelog-master.yaml示例 github地址官方例子地址 简介 Liquibase社区是一个开源项目,帮助数百万开发人员快速管理数据库模式更改。 官网地址 链接: liquibase. springboot集成 依赖 <dependency> <groupId>org.liquibase</groupId>

qq_33430322的博客 1792

生存网络与mlr3proba

通过结合生存网络和mlr3proba,可以使用生存网络模型来预测个体在给定时间点发生事件的概率,并使用mlr3proba提供的工具进行模型的训练、评估和选择最佳模型。iii)基本的机器学习(ML)方法,如重新排序和调整。在本文中,我们将只讨论前五种,因为它们在文献中得到了更好的建立,并且它们具有相同的接口,这简化了调优,我们将在下面看到。我们不会为模型指定自定义架构,而是使用默认架构,如果你熟悉PyTorch,那么你可以选择创建自己的架构,如果你愿意的话,通过将其传递给模型中的custom_net参数。

weixin_46587777的博客 1363

java谔谔_第三篇:SpringBoot - 数据库结构版本管理与迁移

SpringBoot支持了两种数据库结构版本管理与迁移,一个是flyway,一个是liquibase。其本身也支持sql script,在初始化数据源之后执行指定的脚本,本章是基于 Liquibase 开展…- Liquibase开发人员将本地开发机器上的基于文本的文件中的数据库更改存储在本地数据库中。Changelog文件可以任意嵌套,以便更好地管理,每个变更集通常包含描述应用于数据库的更改/重...

weixin_36234452的博客 900

c语言串口编程详解

串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。

jkzyx123的博客 2223

医疗AI新思路:为什么Graph Neural Network能改善气道分割的漏检问题?

本文探讨了Graph Neural Network(GNN)在医疗AI领域改善气道分割漏检问题的创新应用。通过分析3D UNet等传统方法的局限性,揭示了GNN在图结构建模中的独特优势,特别是在捕捉细小末梢支气管方面的突破性表现。文章详细介绍了UNet-GNN混合架构的设计原理、实验性能对比及优化方向,为CT影像分析提供了新思路。

weixin_30379531的博客 224

金仓数据库KingbaseES客户端编程开发框架-Liquibase(3. Liquibase配置说明)

以Spring Boot集成Liquibase为例。在项目中引入Liquibase的依赖。在启动项目时,会进行自动加载。配置changelog文件。

arthemis_14的博客 971

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

搭建仿真的环境,导入VEINS和INET开源库,使用INET库中提供的网络协议和功能模型来模拟通信协议和网络功能,使用SUMO创建道路网络和车辆轨迹,并导出到OMNeT++中 在OMNeT++中使用VEINS通过socket和SUMO连接,借助VEINS实现的TRACI接口来设置车辆相关的行为和场景,最后在OMNET++中结合VEINS,SUMO和INET运行联合仿真实验,并分析车辆在遇到紧急情况下的通信状况和具体行为

mjmmm的博客 1万+

SpringBoot整合数据库版本管理工具Liquibase,赶紧整起来!

从迁移脚本中创建新的数据库检查数据库状态从一个版本快速到达另外一个版本数据库版本管理工具顾名思义是用来管理数据库版本的,像我们的代码有svn和git管理,那么数据库版本怎么来控制呢?当然是用数据库版本管理工具来了,目前主流的数据库管理工具有Flyway和Liquibase,这里我们选择使用Liquibase。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了Liquibase的使用,希望对你有帮助。

零度念者的博客 2599

干货|C#上位机与西门子PLC的Profinet协议通信开发(工控机版)

文章摘要: Profinet是西门子主导的工业以太网协议,支持实时通信(RT/IRT),广泛应用于PLC与工控机通信。本文聚焦C#上位机通过S7协议(集成于Profinet接口)高效访问西门子PLC(S7-1200/1500等),提供完整开发方案: 协议基础:解析Profinet三层架构(TCP/IP层、实时层、应用层),对比S7协议优势(开发便捷、跨平台); 开发实践:基于S7NetPlus/Snap7库实现数据读写,涵盖DB块、I/O点等地址规则; 环境配置:工控机(Windows/Linux/统信UO

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1213

【STK】手把手教你利用STK进行光电红外仿真03-STK/EOIR模块属性之二 导弹等目标的EOIR设置

上一节介绍了如何设置传感器的通用属性和空间、光学、光谱、辐射四种专项属性。这一节介绍如果对导弹等目标的EOIR属性进行修改。

weixin_44184852的博客 2203

SpringBoot整合liquibase

LiquiBase 是一个数据库重构和迁移的开源框架,通过日志的方式来记录数据库的变更。通过执行日志文件中的修改,将数据库更新或回滚到达一致的状态。2.2、创建SpringBoot配置文件来指定一些配置文件地址。2.3、创建配置文件。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 1414

YOLOv8交通管理 详细解释及代码完整示例

YOLOv8在交通管理中的应用及代码实现 摘要:本文详细介绍了YOLOv8在交通管理领域的应用场景,包括车辆检测、违规行为识别和行人安全预警等。文章提供了完整的Python代码示例,展示了如何使用YOLOv8进行交通对象检测和车辆计数统计。代码包含模型加载、对象检测、结果可视化等功能模块,并给出了性能优化和功能扩展建议。该实现基于Ultralytics框架,支持多种YOLOv8模型选择,可根据实际需求调整模型大小和检测参数。

u010117029的博客 153

2021-06-25

springboot集成liquibase pom文件添加依赖: 2.application.yml中可不配置这些,不配置默认去resource/db.changelog下找db.changelog-master.yaml 在db.changelog下添加db.changelog-master.yaml文件 在db.changelog下添加需要生成的数据库表的yaml文件 在 db.changelog-master.yaml 文件中配置你要生成的数据库表的yaml文件名称 5.项

dfgswdfgdefg的博客 594

一种白平衡增益计算中白点权重计算简易实现方式

一种白平衡白点距离权重简易实现方式

大熊 384

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

优雅哥 SpringBoot 2.7 .2 实战基础 - 05 -使用 Liquibase 管理数据库版本

Flyway和Liquibase。前者我没有在项目中使用过,所以本文就只讨论 Liquibase。使用 Liquibase 需要定义一堆 XML 文件,这些 XML 称为 changelog 文件。每个 changelog 文件中又包含多个变化集合 changeSet,每个 changeSet 记录了作者、改变的内容。changeSet 中要修改的内容,通过、addColumn等标签进行操作。通过这种 XML 文件的方式,就可以将代码版本与数据库版本关联在一起。

jh035的博客 421

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

springboot整合liquibase(补充)

导入spring-boot-starter-jdbc,不然后面的配置文件会报错。changelogs下是使用xml要创建的表。连接数据库:为一空的数据库。

渴望飞翔的小白 1128

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

boot-admin整合Liquibase实现数据库版本管理

Liquibase 和 Flyway 是两款成熟的、优秀的、开源/商业版的数据库版本管理工具,鉴于 Flyway 的社区版本对 Oracle 数据库支持存在限制,所以 boot-admin 选择整合 Liquibase 提供数据库版本管理能力支持。 Liquibase 开源版使用 Apache 2.0 协议。boot-admin 是一款采用前后端分离模式、基于 SpringCloud 微服务架构的SaaS后台管理框架。系统内置基础管理、权限管理、运行管理、定义管理、代码生成器和办公管理6个功能模块,集成分布

超然楼 735

数据库版本控制-liquibase

数据库版本控制,liquibase,选型

qq_44691484的博客 2173

java版本控制工具_Java(SpringBoot)数据库版本管理工具liquibase

祝大家新年快乐,有任何问题可与我联系:Java(SpringBoot)数据库版本管理工具目前主流的就是flyway和liquibase,在确认选型之前看了很多对比的文章,大多观点是支持flyway的,主要因为其配置灵活。因此我也准备在我们组内使用flyway,结果在配置弄到一半的时候发现最新版本的flyway不支持我们当前的Oracle版本(支持需要付费),也不知道以后会不会往收费方向发展,于是无...

weixin_42514540的博客 1060
上一篇: 使用EasyExcel根据模板导出文件
下一篇: 设计模式-状态模式 Java
刘火锅
博客等级 码龄7年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值