liquibase集成springboot使用步骤(全网最详细)

  • 本文档主要介绍内容
    • 1:liquibase概念
    • 2:liuibase与spring boot集成
    • 3:liquibase与数据库的基本操作

一:什么是liquibase

LiquiBase(从 2006 年开始投入使用)是一种免费开源的工具,可以实现不同数据库版本之间的迁移(参见 参考资料)。目前也存在少量其他开源数据库迁移工具,包括 openDBcopy 和 dbdeploy。LiquiBase 支持 10 种数据库类型,包括 DB2、Apache Derby、MySQL、PostgreSQL、Oracle、Microsoft®SQL Server、Sybase 和 HSQL。

通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。

二:与springboot集成

  2.1:引入依赖

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

2.2:配置Springliquibasebean

@Configuration
public class LiquibaseConfig {


    @Bean
    public SpringLiquibase liquibase(DataSource dataSource) {
        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setDataSource(dataSource);
        //指定changelog的位置,这里使用的一个master文件引用其他文件的方式
        liquibase.setChangeLog("classpath:liquibase/master.xml");
        //liquibase.setContexts("development,test,production");
        liquibase.setShouldRun(true);
        return liquibase;
    }

}

2.3:在resorces中添加liquibase文件夹,然后创建changelog文件夹,在changeelog文件创建xml文件

此处的xml文件是针对数据库的操作记录

<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.1.xsd">

       <changeSet id="20190713-02" author="solo">
        <createTable tableName="dh_project_category" remarks="项目类型表">
            <column name="id" type="varchar(64)" remarks="项目类型id">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(255)" remarks="类目类型名称"/>
            <column name="status" type="int(11)" remarks="状态。1正常,2删除"/>
            <column name="remark" type="varchar(255)" remarks="备注"/>
        </createTable>
    </changeSet>
</databaseChangeLog>

Id:唯一id

Author:修改人

2.4:在resources中的liquibase文件夹下创建master.xml文件夹,可以将ChangeSet分布在不同文件中。同时<include/>支持多级引用。
基于此功能可以对项目中的ChangeSet进行有效管理。推荐使用以下规范进行管理。

<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.1.xsd">

    <!--
    1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。

    2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。

        2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置

        2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。
    -->

    <includeAll path="liquibase/changelog/" relativeToChangelogFile="false"/>

</databaseChangeLog>

<!--

    1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。

    2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。

        2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置

        2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。

-->

2.5:以上操作,完成了liquibase的配置,启动项目会默认生成两个表

---Databasechangelog:记录的是每一次表修改的记录,里面会详细记录操作的类型和操作

---Databasechangeloglock表用于确保两台计算机不会同时尝试修改数据库。

Ps:整个文件结构

三:基于liquibase对数据库的操作

3.1:通过上面的文档介绍,我们已经知道了liquibase与springboot的集成,并且已经知道,通过master.xml对changelog文件的统一管理,我们可以支持多个不同的changelog的配置和运行,并且已经知道,changlog主要是对数据库的各自操作,接下来,主要介绍的是changelog对数据库的操作方式

3.2

3..2.1:创建表  

<changeSet id="20190713-01" author="solo">
    <createTable tableName="project_info">
        <column name="project_id" type="varchar(64)" encoding="utf8" remarks="项目id">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="project_name" type="varchar(255)" encoding="utf8" remarks="项目名字"/>
    </createTable>
</changeSet>

<createTable>表是创建表   tableName 表明

<column>  字段标签,

name:字段名称  

type:字段类型  

encoding:编码类型

remarks:字段注释

<constraints> 主键标签  

  primaryKey:是否主键

  Nullable:是否为空

项目启动会自动在数据库生成project_info表

3.2.2:修改表-添加列

<changeSet id="20190713-01" author="yunshan">
<addColumn tableName="project_info">
    <column name="address"  type="varchar(255)" encoding="utf8" remarks="地址"/>
</addColumn>
</changeSet>

<addColumn>  tableName 修改表名

        <column>  字段标签,

name:字段名称  

type:字段类型  

注:1:同一个文件中,changeSet中的id不能重复,

2: 每次数据库变更,都会在databasechangelog生成一条记录

3.2.3:修改表-删除列

<changeSet id="20190713-03" author="yunshan">
    <dropColumn tableName="project_info" columnName="address"/>
</changeSet>

3.2.4:修改表-插入数据

<changeSet id="20190713-061" author="yunshan">
    <insert tableName="project_info">
        <column name="project_id" valueNumeric="312223"/>
        <column name="project_status" valueNumeric="322434343"/>
        <column name="project_name" value="wkn"/>
    </insert>
</changeSet>

 <inSert>数据插入标签

     <column>  字段标签,

name:字段名称  

valueNumeric:对应的字符值

3.2.4:修改表-通过sql脚本

 <changeSet id="20200522-02" author="yunshan">
    <sqlFile path="liquibase/sql/project_info.sql"/>
</changeSet>

<sqlFile>标签,指定需要加载的sql路径

通过上对数据库的操作,可以自由对数据库的属性进行修改,插入数据等

三:基于liquibase对数据库的回滚操作

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

托尼吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值