Liquibase的簡單使用


LiquiBase是一個用於數據庫重構和遷移的開源工具,通過日志文件的形式記錄數據庫的變更,然后執行日志文件中的修改,將數據庫更新或回滾到一致的狀態。它的目標是提供一種數據庫類型無關的解決方案,通過執行schema類型的文件來達到遷移。其有點主要有以下:

  • 支持幾乎所有主流的數據庫,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
  • 支持多開發者的協作維護;
  • 日志文件支持多種格式,如XML, YAML, JSON, SQL等;
  • 支持多種運行方式,如命令行、Spring集成、Maven插件、Gradle插件等。

更多詳情介紹,可以瀏覽官網doc

之所以選擇使用liquibase,原因其實挺尷尬的,由於我不會使用容器化技術,不會寫dockfile來運行項目初始化sql腳本,就想有沒有什么簡單方便的形式,最后看中了liquibase,配置起來確實簡單方便。
我是用命令行的形式生成changeLog,然后再集成到springboot中。官網上提供的還有基於ant、maven和服務端的使用的方式,以后再研究。

  1. 下載liquibase的安裝包,解壓到指定目錄下;

  2. 通過generateChangeLog生成現有數據庫的changeLog文件;

     liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog
    

generateChangeLog命令默認只會創建數據庫結構的變更日志文件,如果希望創建插入數據的變更日志文件,可以使用參數diffTypes,該參數包括如下可選項:

  • tables [DEFAULT]表

  • columns [DEFAULT] 列

  • views [DEFAULT] 視圖

  • primaryKeys [DEFAULT] 主鍵

  • indexes [DEFAULT] 索引

  • foreignKeys [DEFAULT]

  • sequences [DEFAULT]

  • data
    例如生成數據:

      liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog
    

我分別生成了兩個changeLog文件,一個是inti-table.xml; 一個是init-data.xml。
3.項目中配置liquibase
首先在項目中添加支持:

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

通過查看源碼,我們能看到默認的配置文件存放的位置:

這里我沒有使用默認的配置,指定了一個自己的路徑,只需要在application.properties中添加如下配置:

#liquibase
liquibase.change-log=classpath:/liquibase/master.xml

--master.xml文件內容,通過inclue標簽引入了兩個changelog,就是之前的表結構和表數據。

<?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">

    <include file="classpath:liquibase/change_log/init-table.xml" relativeToChangelogFile="false"/>
    <include file="classpath:liquibase/change_log/init-data.xml" relativeToChangelogFile="false"/>
 </databaseChangeLog>

項目中的目錄結構如下圖所示:

到此已經位置好了,啟動一下項目,控制台打印出liquibase初始化信息,這時候查看數據庫,會表現數據庫已經初始完畢,后面數據庫如果有變動,可以再生成新的changelog文件,再次添加到項目中,達到持續集成的效果。整個項目的源代碼已經托管到github上了,可以點擊查看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM