LiquiBase实战总结

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

LiquiBase概述

Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。


Liquibase具备如下特性:
* 不依赖于特定的数据库,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL/Caché等12种数据库,这样在数据库的部署和升级环节可帮助应用系统支持多数据库。
* 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。
* 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员同时工作。
* 在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已应用的变化(ChangSet)。
* 提供变化应用的回滚功能,可按时间、数量或标签(tag)回滚已应用的变化。通过这种方式,开发人员可轻易的还原数据库在任何时间点的状态。
* 可生成数据库修改文档(HTML格式)

* 提供数据重构的独立的IDE和Eclipse插件。

Liquibase的核心就是存储变化的XML,如例:

<?xml version="1.0" encoding="UTF-8"?> 
<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.6"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.6
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.6.xsd">
 
    <changeSet id="1" author="netbug_nb">
        <createTable tableName="department">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
            <column name="active" type="boolean" defaultValue="1"/>
        </createTable>
    </changeSet> 
</databaseChangeLog>

其中,changeSet包含不同的数据库变化,几乎涵盖了所有的数据库变化类型,具体支持的类型要看API,我这里给几个例子:

* 创建和删除表、视图、存储过程、主键、外键、索引等

* 重命名表、视图、列等

* 加入列缺省值、唯一约束、非空约束等

* 合并两个列

* 在一个表的数据的基础上创建一个字典表

除此之外,Liquibase还允许你运行自己的Sql脚本、执行Shell程序。

在ivy.xml中引入Liguibase的依赖

?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">

        ...
        <!-- 数据库相关内容 -->
        ...
        <dependency org="org.liquibase" name="liquibase-core" rev="2.0.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>

        ...

    </dependencies>
</ivy-module>

将Liquibase集成到spring框架

<beans>
    ...

    <!-- 数据库事务管理 -->
    <bean id="tm" 
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="ds" />
    </bean>

    <!-- 初始化数据库 -->
    <bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
        <property name="dataSource" ref="ds" />
        <property name="changeLog" value="classpath:com/cdv/test/db_changelog/master.xml" />
        <property name="contexts" value="production" />
    </bean>
</beans>

编制数据库变更文件

我大致分了分类:
  1. om/cdv/test/db_changelog/master.xml ——引用了下面三个文件c
  2. com/cdv/test/db_changelog/table.xml ——对数据库表的更改过程
  3. com/cdv/test/db_changelog/view.xml ——对视图的更改过程
  4. com/cdv/test/db_changelog/data.xml ——对数据的操作

  • com/cdv/test/db_changelog/master.xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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-2.0.xsd">
    <include file="table.xml" relativeToChangelogFile="true" />
    <include file="view.xml" relativeToChangelogFile="true" />
    <include file="data.xml" relativeToChangelogFile="true" />
</databaseChangeLog>

  • com/cdv/test/db_changelog/table.xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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-2.0.xsd">

    <!-- OOOOOO注意: 本文件不要格式化OOOOOO -->

    <changeSet author="netbug_nb" id="20131128-test" context="production">
        <createTable tableName="bf_role">
            <column name="rolename" type="NVARCHAR(100)"><constraints nullable="false" primaryKey="true" primaryKeyName="PK_ROLE" /></column>
            <column name="roleconfig" type="TEXT"></column>
            <column name="readonly" type="TINYINT"><constraints nullable="false" /></column>
        </createTable>
        <createTable tableName="bf_user">
            <column name="userid" type="NVARCHAR(100)"><constraints nullable="false" primaryKey="true" primaryKeyName="PK_USER" /></column>
            <column name="username" type="NVARCHAR(100)"><constraints nullable="false" /></column>
            <column name="password" type="NVARCHAR(32)"><constraints nullable="false" /></column>
            <column name="rolename" type="NVARCHAR(100)"><constraints nullable="false" /></column>
            <column name="departmentid" type="NVARCHAR(100)"></column>
            <column name="email" type="NVARCHAR(255)"></column>
            <column name="cellphone" type="NVARCHAR(14)"></column>
            <column name="telphone" type="NVARCHAR(20)"></column>
            <column name="columns" type="TEXT"></column>
            <column name="disabled" type="TINYINT"><constraints nullable="false" /></column>
            <column name="readonly" type="TINYINT"><constraints nullable="false" /></column>
        </createTable>

    <changeSet author="netbug_nb" id="20140107-test" context="production">
        <addColumn tableName="bf_synctask">
            <column name="content" type="TEXT"></column>
        </addColumn>
        <createSequence sequenceName="BF_SQ_SYNCTASKID" startValue="0" incrementBy="1" />
    </changeSet>

    <changeSet author="netbug_nb" id="20140109-test" context="production">
        <modifyDataType tableName="bf_file" columnName="hash" newDataType="NVARCHAR(50)"/>
        <addColumn tableName="bf_file">
            <column name="infection" type="TEXT"></column>
        </addColumn>
    </changeSet>
</databaseChangeLog>
  • com/cdv/test/db_changelog/data.xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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-2.0.xsd">

    <changeSet author="sun-wei" id="20131128-test-initdata">

        <!-- 初始化角色 -->
        <insert tableName="bf_role">
            <column name="rolename" value="系统管理员" />
            <column name="readonly" valueBoolean="true" />
        </insert>
        <insert tableName="bf_role">
            <column name="rolename" value="维护管理员" />
            <column name="readonly" valueBoolean="true" />
        </insert>

        <!-- 初始化用户 -->
        <insert tableName="bf_user">
            <column name="userid" value="admin" />
            <column name="username" value="系统管理员" />
            <column name="password" value="xxxxxxxxxxxx" />
            <column name="rolename" value="系统管理员" />
            <column name="disabled" valueBoolean="false" />
            <column name="readonly" valueBoolean="true" />
        </insert>
        <insert tableName="bf_user">
            <column name="userid" value="manager" />
            <column name="username" value="维护管理员" />
            <column name="password" value="xxxxxxxxxxxxx" />
            <column name="rolename" value="维护管理员" />
            <column name="disabled" valueBoolean="false" />
            <column name="readonly" valueBoolean="true" />
        </insert>
    </changeSet>

</databaseChangeLog>

OK,现在启动你的Web应用

启动后,Liquibase将自动帮你创建数据库表字段视图等、以后数据库结构发生任何变化,去添加ChangeSet吧,它会帮你修改数据库的,不需要你直接操作数据库了。
Liquibase通过在你的数据库中增加两个它自己表来判断和处理数据库的变化。
另外,Liquibase还支持不同数据的的方言哦,通过在ChangeSet中增加dbms属性即可达到目的,比如
    <changeSet author="xxx" id="xxxx-id-1" context="production" dbms="mssql">
        ...
    </changeSet>

    <changeSet author="xxx" id="xxxx-id-1" context="production" dbms="mysql">
        ...
    </changeSet>


Best Wishes For You!


liquibase介绍 1、Liquibase还是Flyway Flyway和Liquibase都支持专业数据库重构和版本控制所需的所有功能,因此您将始终知道要处理的数据库模式的版本以及它是否与软件版本匹配。两种工具都集成在Maven或Gradle构建脚本中以及Spring Boot生态系统中,因此您可以完全自动化数据库重构。 Flyway使用SQL定义数据库更改,因此您可以定制SQL脚本,使其与基础数据库技术(例如Oracle或PostgreSQL)良好地配合使用。另一方面,使用Liquibase,您可以通过使用XML,YA 阅读详情

相关推荐

liquibase入门实战

liquibase说白了就是一个将你的数据库脚本转化为xml格式保存起来,其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。 当然最重要的一点还是liquibase支持多种类型的数据库(我了解,目前市面上的主流关系型数据库都是OK的),也就是方便数据迁移。 废话不多说,直接上干货: 1.首先你需要引入liquibase的maven插件:

u010199513的专栏 1万+

liquibase介绍,liquibase这一篇就够了

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

Arrowarcher的博客 4万+

IntelliJ IDEA调试中Liquibase的Changelog Lock问题分析与实战解决

本文详细分析了IntelliJ IDEA调试中Liquibase的Changelog Lock问题,提供了快速解锁的实战操作手册,并深入解析了锁机制原理。通过配置优化、启动脚本增强和监控告警体系等工程化实践,有效预防和解决数据库死锁问题,提升开发效率。

weixin_29237635的博客 240

【Liquibase】基础概念 + demo实战

liquibase 入门级 理论+实战

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

SpringBoot集成Liquibase实现数据库版本控制实战

数据库版本控制是现代软件开发中的关键实践,它通过结构化方式管理数据库变更,确保开发、测试和生产环境的一致性。Liquibase作为主流工具,采用变更日志(Changelog)机制记录DDL操作,通过DATABASECHANGELOG表跟踪执行状态,支持XML/YAML/JSON/SQL多种格式。在Java生态中,SpringBoot与Liquibase的无缝集成大大简化了配置流程,开发者只需添加liquibase-core依赖并配置主变更日志路径即可实现自动化迁移。典型应用场景包括多环境部署、CI/CD集成

weixin_28365523的博客 312

Liquibase vs Flyway:从选型到落地,数据库迁移工具实战对比指南

本文深入对比了Liquibase与Flyway两大主流数据库迁移工具,从核心设计哲学、脚本支持、Spring Boot集成、回滚机制到多团队协作等维度进行实战分析。通过电商项目案例,为不同规模和技术栈的团队提供选型决策框架与落地实践指南,帮助开发者根据项目需求选择最合适的工具,提升数据库变更管理的可靠性与团队协作效率。

tgb345678的博客 789

Liquibase 入门实战教程

本文介绍了从 Flyway 迁移到 Liquibase 的基本概念和操作指南。主要内容包括: 核心概念 changeSet:最小执行单元,通过文件名、ID和作者标识 changelog:组织变更的入口文件 DATABASECHANGELOG:记录执行历史 DATABASECHANGELOGLOCK:执行锁机制 项目目录结构 区分SQL脚本和Liquibase配置 按版本阶段组织变更集 Docker执行模板等

lzz的博客 446

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

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

颜淡慕潇 2万+

Liquibase在微服务架构中的实战应用

Liquibase在微服务架构中表现出色,能够有效管理多数据库环境的变更。通过合理的配置和协调策略,可以实现独立变更与跨服务一致性的平衡。未来,我们计划进一步探索Liquibase与其他DevOps工具(如Jenkins、ArgoCD)的集成,实现更高效的CI/CD流程。如果你也在为微服务的数据库变更管理发愁,不妨试试Liquibase和。

GoldenleafRaven13的博客 282

Liquibase数据库版本控制工具实战指南

在现代的IT环境中,随着应用程序的快速发展,数据库结构的变更变得越来越频繁和复杂。为了应对这种变化,数据库版本控制作为一种管理策略应运而生。Liquibase作为一个流行的数据库重构工具,其作用在于帮助数据库管理员和开发人员以一种可追溯、可控、可协作的方式管理数据库的变更。Liquibase通过一种简单的、声明式的语言,将数据库的变更记录在一个又一个的“ChangeSet”中。每个ChangeSet代表一次数据库的变更操作,它使得数据库结构的变更可以被记录、审核和重复执行。

weixin_42576410的博客 910

liquiunit:Liquibase的单元测试工具实战指南

liquiunit是一个专门为数据库迁移测试而设计的工具,它与Liquibase这类流行的数据库变更管理工具紧密协作。它通过模拟真实的数据库变更过程,为数据库操作提供一个安全且高效的测试环境。除了标准的 SQL 断言之外, liquiunit 也支持自定义验证脚本。开发者可以根据实际的测试需求编写 Java 类或 Groovy 脚本来执行更复杂的验证逻辑。// 示例代码: liquiunit 自定义验证脚本@Overridetry {if (count!= 1) {

weixin_42462474的博客 1080

数据库版本控制工具:Liquibase 与 Flyway 实战

通过合理选型和规范实施,可使数据库变更效率提升 $40%$ 以上,同时将生产事故率降低至 $\frac{1}{10}$ 以下。n \xrightarrow{\text{变更脚本}} \text{版本}

gredfdfssdf的博客 493

flowable6.7.2 mysql 例子(附带兼容达梦数据库的改写包儿)

flowable6.7.2 mysql 例子 接口包括发起流程,完成任务,查看流程图,查看代办任务,查看可拾取任务,认领任务 后端springboot项目 附带 兼容达梦数据库的两个重写的包儿 flowable-engine-common-6.7.2.jar liquibase-core-4.9.1.jar 可以支持用户任务变量,候选人

最全面DataHub数据库迁移指南:Flyway vs Liquibase实战测评

还在为DataHub数据库迁移头痛?部署时版本冲突、回滚困难、团队协作混乱?本文通过实测对比Flyway与Liquibase两大主流工具,帮你30分钟搞定DataHub数据库版本管理最佳实践。 ## 读完你将获得 - 两大工具在DataHub环境的兼容性测试 - 零基础迁移脚本编写模板 - 分布式部署场景下的并发控制方案 - 配套Docker一键部署脚本 ## 工具选型对比表 | 评估维度

gitblog_00605的博客 423

Halcon深度学习2 -- 标注工具Deep Learning Tool下载安装

Deep Learning Tool为Halcon开发公司MVTec官方提供的一款标注工具: 标记培训数据是任何深度学习应用程序的关键的第一步。 当涉及到应用程序的性能,准确性和健壮性时,此标记数据的质量起着重要作用。 借助MVTec深度学习工具,我们正在为HALCON用户创建全面流畅的深度学习体验。 通过开发我们自己的解决方案,我们确保可以将其输出无缝集成到HALCON中。 该应用程序还使我们能够吸收在开发HALCON深度学习算法时获得的丰富经验和专业知识,而该算法自然也涉及很多标签! Deep.

fengyingv的博客 1万+

Codesys电子凸轮实战:从机械替代到虚轴设计的5个关键步骤

本文详细介绍了Codesys电子凸轮技术在运动控制领域的实战应用,从机械替代到虚轴设计的5个关键步骤。通过电子凸轮技术,操作员可以快速调整切割模式,显著提升产线效率。文章还探讨了虚轴架构、CAM表设计、动态耦合技巧及调试避坑指南,为工业自动化领域提供了实用的解决方案。

tech5的博客 767

终极指南:Flyway与Liquibase数据库迁移工具对比及实战应用

在Java开发中,数据库迁移是确保团队协作和版本控制的关键环节。GitHub加速计划/CodeGuide项目作为小傅哥多年Java开发经验的技术汇总,为开发者提供了丰富的学习资源。本文将深入对比两款主流数据库迁移工具Flyway与Liquibase,帮助你选择最适合项目需求的解决方案。 ## 为什么数据库迁移工具如此重要? 数据库结构的变更管理是每个开发团队必须面对的挑战。手动执行SQL脚本不

gitblog_00684的博客 689

目标检测数据集 第059期-基于yolo标注格式的水果李子检测数据集(含免费分享)

李子作为中国三大水果之一,种植历史超 3000 年,在市场中占据重要地位。传统李子种植、施肥、采摘依赖大量人力,存在资源浪费、产量估算不准、采摘时机难把控等问题。此前,农业领域缺乏针对 “未成熟李子” 的专用数据集,现有水果检测数据集多聚焦于成熟果实(如苹果、柑橘),且未覆盖李子种植的复杂自然场景。在使用该数据集进行学术研究时,应遵守相关的学术规范,引用该数据集的来源,尊重数据集创作者的劳动成果。,用于训练改进型模型,解决李子精准检测的核心痛点。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 772
下一篇: SQL Server触发器
谦逊的网虫
博客等级 码龄15年 4粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值