天天看點

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的安裝包,解壓到指定目錄下;
Liquibase的簡單使用
  1. 通過

    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>

    通過檢視源碼,我們能看到預設的配置檔案存放的位置:

Liquibase的簡單使用

這裡我沒有使用預設的配置,指定了一個自己的路徑,隻需要在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的簡單使用

到此已經位置好了,啟動一下項目,控制台列印出liquibase初始化資訊,這時候檢視資料庫,會表現資料庫已經初始完畢,後面資料庫如果有變動,可以再生成新的changelog檔案,再次添加到項目中,達到持續內建的效果。整個項目的源代碼已經托管到github上了,可以點選檢視。