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對數據庫的回滾操作

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章