LiquiBase
是一個用於數據庫重構和遷移的開源工具,經過日誌文件的形式記錄數據庫的變動,而後執行日誌文件中的修改,將數據庫更新或回滾到一致的狀態。它的目標是提供一種數據庫類型無關的解決方案,經過執行schema類型的文件來達到遷移。其有點主要有如下:html
更多詳情介紹,能夠瀏覽官網doc。java
之因此選擇使用liquibase,緣由其實挺尷尬的,因爲我不會使用容器化技術,不會寫dockfile來運行項目初始化sql腳本,就想有沒有什麼簡單方便的形式,最後看中了liquibase,配置起來確實簡單方便。
我是用命令行的形式生成changeLog
,而後再集成到springboot
中。官網上提供的還有基於ant、maven和服務端的使用的方式,之後再研究。mysql
下載liquibase的安裝包,解壓到指定目錄下;
git
經過generateChangeLog
生成現有數據庫的changeLog文件;github
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,該參數包括以下可選項:spring
data
例如生成數據:sql
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>
經過查看源碼,咱們能看到默認的配置文件存放的位置:
springboot
這裏我沒有使用默認的配置,指定了一個本身的路徑,只須要在application.properties中添加以下配置:app
#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上了,能夠點擊查看。