springboot2集成liquibase

举报
大中华潇湘夜雨 发表于 2021/11/30 16:39:34 2021/11/30
【摘要】 LiquiBase概述Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。Liquibase具备如下特性:不依赖于特定的数据库,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL/Caché等12种数据库,这样在数据库的部署和升级环节可帮助应...

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
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.6
  
    <changeSet id="1" author="jorn">
        <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,例如:

  1. 创建和删除表、视图、存储过程、主键、外键、索引等
  2. 重命名表、视图、列等
  3. 加入列缺省值、唯一约束、非空约束等
  4. 合并两个列
  5. 在一个表的数据的基础上创建一个字典表


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

springboot集成liquibase


liquibase可以使用自己的数据源,也可与spring集成,本次与springboot集成,我们使用springboot的数据源。


1.添加依赖


springboot内置了对liquibase整合的支持,我们只需要在项目中引入liquibase的依赖,进行配置即可。 在pom文件中添加以下依赖:

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

2.配置application.properties(或application.yml)文件


liquibase:
  enabled: true                                               #启用liquibase
  change-log: classpath:db/changelog/db.changelog-master.xml  #存储变更的XML文件位置

3.编写存储变化的xml文件

db.changelog-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"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
 
  <include file="classpath:db/changelog/db.changelog-20211130.xml"/>
</databaseChangeLog>

db.changelog-20211130.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"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
 
    <!--备注:id采用日期+序号的命名方式,请勿修改历史文件的任何内容。-->
 
 
    <!-- tb_user添加user_name字段 -->
    <changeSet id="vms-2021-11-30-1" author="Sam">
        <addColumn tableName="tb_user">
            <column name="user_name" type="varchar(50)"></column>
        </addColumn>
    </changeSet>
 
    <!-- 删除视图 -->
    <changeSet id="vms-2021-11-30-2" author="Sam">
        <dropView viewName="v_user_info"></dropView>
        <dropView viewName="v_org_info"></dropView>
    </changeSet>
 
</databaseChangeLog>

4.启动springboot应用,检查数据库,发现所有变更已生效

5.Liquibase基本规范

1. ChangeSet id使用[任务ID]-[日期]-[序号],如 T100-20181009-001
2. ChangeSet必须填写author
3. Liquibase禁止对业务数据进行sql操作
4. 使用<sql>时,禁止包含schema名称
5. Liquibase禁止使用存储过程
6. 所有表,列要加remarks进行注释
7. 已经执行过的ChangeSet严禁修改。
8. 不要随便升级项目liquibase版本,特别是大版本升级。不同版本ChangeSet MD5SUM的算法不一样。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。