首頁 > 軟體

SpringBoot整合liquibase及liquibase生成初始化指令碼的方式

2022-02-10 13:00:08

一. SpringBoot整合liquibase

專案整合liquibase作用

  1. 對資料庫表欄位進行版本控制
  2. 專案初始化部署時初始化資料庫表和資料

①.匯入pom依賴

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

②.設定application.yml檔案,指定master.xml

spring:
  liquibase:
    change-log: classpath:liquibase/master.xml #指定master.xml檔案的位置

不同spring版本設定方式不一樣
具體看原始碼LiquibaseProperties中設定

③.新建master.xml檔案用於中指定資料庫初始化指令碼的位置

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

④.將資料庫表初始指令碼init_table.xml和資料初始指令碼init_data.xml放到專案目錄下

指令碼可以通過手寫的方式或者通過liquibase自動生成;

啟動專案如果第一次執行則會在資料庫中建立表和資料
後面如果指令碼中有新增表或者欄位啟動專案的時候也會自動建立生成

二. liquibase生成資料庫表和資料的初始化指令碼

liquibase有兩種方式生成初始化指令碼

方法一:在官網下載liquibase壓縮包,使用原生的命令列指令來生成

下載liquibase壓縮包,解壓,將mysql連線jar包複製一份到此目錄下

進入解壓目錄執行如下執行

根據資料庫生成表結構檔案

./liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.17.jar --changeLogFile=./init-data.xml --url="jdbc:mysql://192.168.0.162:3306/hello_world" --username=root --password=123456 --diffTypes=data generateChangeLog

根據資料庫生成初始資料檔案

./liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.17.jar --changeLogFile=./init-table.xml --url="jdbc:mysql://192.168.0.162:3306/hello_world" --username=root --password=123456 generateChangeLog
  • 資料庫驅動取決於資料庫

–driver=com.mysql.cj.jdbc.Driver

  • mysql連線

–classpath=mysql-connector-java-8.0.17.jar

  • 自定義生成的初始化指令碼檔名

–changeLogFile=./init-data.xml

  • 資料庫連線地址

–url=“jdbc:mysql://192.168.0.162:3306/hello_world”

  • 資料庫使用者名稱密碼

-username=root
–password=123456

  • 生成初始化表資料需要加上這個設定,生成表結構則不加

-diffTypes=data

方法二:使用Maven外掛

<plugin>
	<groupId>org.liquibase</groupId>
	<artifactId>liquibase-maven-plugin</artifactId>
	<version>3.4.2</version>
	<configuration>
		<changeLogFile>${basedir}/src/main/resources/liquibase/change_log/changelog.xml</changeLogFile>
		<!--changelog檔案生成位置-->
		<outputChangeLogFile>${basedir}/src/main/resources/liquibase/change_log/changelog.xml</outputChangeLogFile>
		<!--資料庫連線-->
		<driver>com.mysql.jdbc.Driver</driver>
		<url>jdbc:mysql://192.168.0.30:3306/school</url>
		<username>qj</username>
		<password>123456</password>
		<!--輸出檔案編碼-->
		<outputFileEncoding>UTF-8</outputFileEncoding>
		<!--執行的時候是否顯示詳細的引數資訊-->
		<verbose>true</verbose>
		<!--連線非本地資料庫是否彈出提示框-->
		<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
		<!--生成changelog檔案內容-->
		<diffTypes>tables, views, columns, indexs,foreignkeys, primarykeys, uniqueconstraints, data</diffTypes>
	</configuration>
</plugin>

如果只是生成資料庫表指令碼,則將上面的diffTypes註釋起來或者去掉裡面的data
如果只是生成資料指令碼,則只留下data
如果要把資料表指令碼和資料指令碼生成到一個檔案則保留上面的difftypes所有內容

安裝好maven外掛後maven外掛中可以看如下圖的指令,點選即可生成指令碼檔案

生成指令碼如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
          
    <changeSet author="404997819 (generated)" id="1590732067909-4">
        <createTable tableName="t_student">
            <column autoIncrement="true" name="studentId" remarks="學生自增ID" type="INT">
                <constraints primaryKey="true"/>
            </column>
            <column name="classId" remarks="班級ID" type="INT"/>
            <column name="userCode" remarks="使用者唯一碼" type="VARCHAR(20)"/>
            <column name="studentName" remarks="學生姓名" type="VARCHAR(20)"/>
            <column name="studentImageUrl" remarks="學生頭像地址" type="VARCHAR(200)"/>
            <column name="studentCode" remarks="學生學號" type="VARCHAR(50)"/>
            <column name="IDCard" remarks="身份證號" type="VARCHAR(50)"/>
            <column name="status" remarks="學生狀態 1:在讀 0:畢業 -1:轉校" type="VARCHAR(5)"/>
            <column name="flag" remarks="是否刪除 1:正常顯示,-1:表示刪除" type="VARCHAR(10)"/>
            <column name="createDate" remarks="建立時間" type="datetime"/>
        </createTable>
    </changeSet>
    
    <changeSet author="404997819 (generated)" id="1590732067909-6">
        <createTable tableName="t_teacherRelation">
            <column autoIncrement="true" name="teacherRelationId" remarks="主鍵自增ID" type="INT">
                <constraints primaryKey="true"/>
            </column>
            <column name="classId" remarks="班級ID" type="INT"/>
            <column name="teacherId" remarks="教師ID" type="INT"/>
            <column name="teacherType" remarks="教師型別 1:班主任" type="VARCHAR(10)"/>
            <column name="flag" remarks="是否刪除 1:正常顯示,-1:表示刪除" type="VARCHAR(10)"/>
            <column name="createDate" remarks="建立時間" type="datetime"/>
        </createTable>
    </changeSet>
   
    <changeSet author="404997819 (generated)" id="1590732067909-10">
        <createIndex indexName="Reft_userinfo88" tableName="t_api_logs">
            <column name="apiToken"/>
        </createIndex>
    </changeSet>
</databaseChangeLog>

參考文章如下
http://blog.jiunile.com/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7liquibase.html
https://blog.csdn.net/cover1231988/article/details/78124673?utm_source=blogxgwz5
https://www.cnblogs.com/tonyq/p/8039770.html
https://www.jianshu.com/p/07a45b6722fd

到此這篇關於SpringBoot整合liquibase的文章就介紹到這了,更多相關SpringBoot整合liquibase內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com