SpringBoot 整合 liquibase

LiquiBase是一個(gè)用于數(shù)據(jù)庫重構(gòu)和遷移的開源工具茅郎,通過日志文件的形式記錄數(shù)據(jù)庫的變更,然后執(zhí)行日志文件中的修改拾因,將數(shù)據(jù)庫更新或回滾到一致的狀態(tài)旺罢。它的目標(biāo)是提供一種數(shù)據(jù)庫類型無關(guān)的解決方案旷余,通過執(zhí)行schema類型的文件來達(dá)到遷移。其有點(diǎn)主要有以下:

  • 支持幾乎所有主流的數(shù)據(jù)庫扁达,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等正卧;
  • 支持多開發(fā)者的協(xié)作維護(hù);
  • 日志文件支持多種格式跪解,如XML, YAML, JSON, SQL等炉旷;
  • 支持多種運(yùn)行方式,如命令行叉讥、Spring集成窘行、Maven插件、Gradle插件等图仓。

liquibase 官方文檔地址:http://www.liquibase.org/documentation/index.html

一罐盔、引入依賴

先在 pom 文件里引入依賴

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

二、指定配置文件位置

在代碼中新建一個(gè) LiquibaseConfig 類救崔,用于配置 Liquibase翘骂,指定配置文件的位置。

import javax.sql.DataSource;
import liquibase.integration.spring.SpringLiquibase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class LiquibaseConfig {

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

}

三、編寫配置文件

目錄結(jié)構(gòu):

src/main/resources 下新建一個(gè)文件夾:liquibase草丧,用來存放跟 liquibase 相關(guān)的文件狸臣。

master.xml

然后在 liquibase 文件夾下新建 master.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">

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

</databaseChangeLog>

includeAll 標(biāo)簽可以把一個(gè)文件夾下的所有 changelog 都加載進(jìn)來昌执。如果單個(gè)加載可以用 include烛亦。

includeAll 標(biāo)簽里有兩個(gè)屬性:pathrelativeToChangelogFile

Attribute Description
file Name of the file to import required
relativeToChangelogFile Is the file path relative to the root changelog file rather than to the classpath. Defaults to "false" since 1.9

path (在 include 標(biāo)簽里是 file):指定要加載的文件或文件夾位置

relativeToChangelogFile :文件位置的路徑是否相對于 root changelog 是相對路徑懂拾,默認(rèn) false煤禽,即相對于 classpath 是相對路徑。

changelog

另在 liquibase 文件夾下新建 changelogs 文件夾用來存放 changelog岖赋。

這里新建一個(gè) changelog-1.0.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-01" author="solo">
        <createTable tableName="project_info">
            <column name="project_id" type="varchar(64)" encoding="utf8" remarks="項(xiàng)目id">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="project_name" type="varchar(255)" encoding="utf8" remarks="項(xiàng)目名字"/>
            <column name="project_difficulty" type="float" encoding="utf8" remarks="項(xiàng)目難度"/>
            <column name="category_id" type="varchar(64)" encoding="utf8" remarks="項(xiàng)目類型類目編號(hào)"/>
            <column name="project_status" type="int(11)" encoding="utf8" remarks="項(xiàng)目狀態(tài), 0招募中檬果,1 進(jìn)行中,2已完成唐断,3失敗选脊,4延期,5刪除"/>
            <column name="project_desc" type="varchar(512)" encoding="utf8" remarks="項(xiàng)目簡介"/>
            <column name="project_creater_id" type="varchar(64)" encoding="utf8" remarks="項(xiàng)目創(chuàng)建者id"/>
            <column name="team_id" type="varchar(64)" encoding="utf8" remarks="項(xiàng)目所屬團(tuán)隊(duì)id"/>
            <column name="create_time" type="bigint(64)" encoding="utf8" remarks="創(chuàng)建時(shí)間"/>
            <column name="update_time" type="bigint(64)" encoding="utf8" remarks="更新時(shí)間"/>
        </createTable>
    </changeSet>
    
    <changeSet id="20190713-02" author="solo">
        <createTable tableName="project_category" remarks="項(xiàng)目類型表">
            <column name="id" type="varchar(64)" remarks="項(xiàng)目類型id">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(255)" remarks="類目類型名稱"/>
            <column name="status" type="int(11)" remarks="狀態(tài)脸甘。1正常恳啥,2刪除"/>
            <column name="remark" type="varchar(255)" remarks="備注"/>
        </createTable>
    </changeSet>

    <changeSet id="20190713-03" author="solo">
        <createTable tableName="project_like_user" remarks="項(xiàng)目點(diǎn)贊表">
            <column name="id" type="varchar(64)" remarks="主鍵id">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="project_id" type="varchar(64)" remarks="項(xiàng)目id"/>
            <column name="user_id" type="varchar(64)" remarks="點(diǎn)贊的用戶id"/>
            <column name="status" type="int(11)" remarks="點(diǎn)贊狀態(tài),0 取消點(diǎn)贊丹诀,1點(diǎn)贊"/>
            <column name="type" type="int(11)" remarks="類型 1點(diǎn)贊"/>
            <column name="create_time" type="bigint(64)" remarks="創(chuàng)建時(shí)間"/>
            <column name="update_time" type="bigint(64)" remarks="更新時(shí)間"/>
        </createTable>
    </changeSet>

    <changeSet id="20190713-04" author="solo">
        <createTable tableName="project_picture" remarks="項(xiàng)目圖片表">
            <column name="id" type="varchar(64)" remarks="圖片id">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="project_id" type="varchar(64)" remarks="項(xiàng)目id"/>
            <column name="picture_url" type="varchar(64)" remarks="圖片地址"/>
            <column name="picture_url_32" type="varchar(64)" remarks="圖片地址32位"/>
            <column name="picture_url_64" type="varchar(64)" remarks="圖片地址64位"/>
        </createTable>
    </changeSet>

</databaseChangeLog>

如果你的項(xiàng)目一開始就用了 liquibase钝的,那可以像上面這樣寫翁垂,把建表語句都寫在 changelog 里。

如果一開始沒用硝桩,后期想引入 liquibase沿猜,可以把以前的數(shù)據(jù)庫導(dǎo)出成 sql,然后引入 sql 文件亿柑。方式如下:

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

    <include file="liquibase/changelogs/project.sql" relativeToChangelogFile="false"/>

</databaseChangeLog>

直接把項(xiàng)目導(dǎo)出的數(shù)據(jù)庫文件 project.sql 通過 include 標(biāo)簽引進(jìn)來邢疙。


以上就是 SpringBoot 整合 Liquibase 的全部內(nèi)容。

如果有疑問或好的建議望薄,可以加 WX 交流:douglas1840

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疟游,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痕支,更是在濱河造成了極大的恐慌颁虐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卧须,死亡現(xiàn)場離奇詭異另绩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)花嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門笋籽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椭员,你說我怎么就攤上這事车海。” “怎么了隘击?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵侍芝,是天一觀的道長。 經(jīng)常有香客問我埋同,道長州叠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任凶赁,我火速辦了婚禮咧栗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哟冬。我一直安慰自己楼熄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布浩峡。 她就那樣靜靜地躺著可岂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翰灾。 梳的紋絲不亂的頭發(fā)上缕粹,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天稚茅,我揣著相機(jī)與錄音,去河邊找鬼平斩。 笑死亚享,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绘面。 我是一名探鬼主播欺税,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揭璃!你這毒婦竟也來了晚凿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤瘦馍,失蹤者是張志新(化名)和其女友劉穎歼秽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體情组,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡燥筷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了院崇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肆氓。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖底瓣,靈堂內(nèi)的尸體忽然破棺而出做院,到底是詐尸還是另有隱情,我是刑警寧澤濒持,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站寺滚,受9級特大地震影響柑营,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜村视,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一官套、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚁孔,春花似錦奶赔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鼻百,卻和暖如春绞旅,著一層夾襖步出監(jiān)牢的瞬間摆尝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工因悲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堕汞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓晃琳,卻偏偏與公主長得像讯检,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子卫旱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 【陽光男孩 張文哲 11月29日 星期三人灼,小雪,堅(jiān)持原創(chuàng)分享第31天】 一天下午誊涯,我在路上行走的時(shí)候挡毅,看...
    張文哲閱讀 1,035評論 4 0
  • 第一次去基地摘草莓 一路走過 腿擦過草莓葉子 窸窸窣窣的 蜜蜂嗡嗡的飛著 別有一番風(fēng)味 一路摘 一路吃 那種撐撐的...
    PWong閱讀 248評論 0 0
  • 多肉植物老樁系列 時(shí)間讓它變成了這般模樣 關(guān)注多肉花客
    多肉花客閱讀 238評論 0 0
  • 周日 天津下雨了 應(yīng)該是在我起床之前 刷了微博 看見北京下雪了 好期待 下午回去 就能看見啦 哈哈 心里很亂 有很...
    漫家的貓呀閱讀 272評論 0 0