Idea Spring-boot maven下使用liquibase


 官方文檔

 https://docs.liquibase.com/tools-integrations/maven/home.html

 通過liquibase使用mysql

 https://docs.liquibase.com/workflows/database-setup-tutorials/mysql.html?Highlight=mysql  首先在pom.xml中引入liquibase的依賴
<dependency>
     <groupId>org.liquibase</groupId>
     <artifactId>liquibase-core</artifactId>
</dependency>
 在resources目錄下新建一個文件 liquibase.properties
--driver=com.mysql.cj.jdbc.Driver
--classpath=mysql-connector-java-8.0.22.jar
--url="jdbc:mysql://bj-cdb-nivnaury.sql.tencentcdb.com:60991/lianmai?autoReconnect=true&useSSL=FALSE" 
--changeLogFile=db.changelog-1.0.xml
--username=*****--password=*****
 在此之前,我們需要先引入mysql連接器,注冊mysql驅動  打開project structure,由於我這個項目已經在 pom.xml 文件中注入了mysql-connector的依賴,library和modules已經自動下載  引入mysql連接器  注冊mysql驅動    liquibase.properties的配置類比如下
driver=com.mysql.cj.jdbc.Driver
classpath=mysql-connector-java-8.0.22.jar
url=jdbc:mysql://bj-cdb-nivnaury.sql.tencentcdb.com:*/lianmai?autoReconnect=true&useSSL=FALSE
changeLogFile=src/main/resources/db/changelog/dbChangeLog.xml
outputChangeLogFile=src/main/resources/db/changelog/outputChangeLog.xml
username=*
password=*
 如果我們在一個已經有數據庫和數據表的項目上使用 liquibase 數據遷移工具,那么可以通過changelog命令生成現有數據庫快照

 生成changelog命令

 https://docs.liquibase.com/commands/community/generatechangelog.html?Highlight=generateChangeLog

 踩坑過程

 首先要配置propertyFile屬性,下面是我的目錄結構以及propertyFile的屬性配置  
<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <configuration> <propertyFile>src/main/resources/liquibase.properties</propertyFile> </configuration> </plugin>
   然后需要在liquibase.properties中配置outputChangeLogFile屬性  我們通過 execute maven goal 來執行 liquibase指令    點擊上圖圖標后回車執行    剛開始url這塊,冒號沒有去掉,執行 mvn liquibase:generateChangeLog 指令出現了以下這種錯誤      國外有個老哥犯了同樣的錯誤,https://stackoverflow.com/questions/49053509/ms-sql-liquibase-connection-could-not-be-created  然后outputChangeLogFile文件位置配置錯誤,執行指令出現了下面這種報錯    然后修改文件路徑,需要注意這個路徑是從src開始的,不是從properties的當前目錄開始的  正確的配置應該是
outputChangeLogFile=src/main/resources/db/changelog/outputChangeLog.xml
 命令執行成功之后,會出現以下圖像    然后彈框確認是否繼續執行    最后文件中的結果如下所示    下圖是數據庫中的Persons表    如果我們要去修改這個數據庫就需要用到changeLogFile

 通過liquibase update命令使用changeLogFile文件更新數據庫

 修改changeLog的路徑      然后可以在changelog中建表 
  •  將changeset添加到變更日志。
  •  changeset由author和id屬性唯一標識。
  •  Liquibase嘗試執行事務中在最后提交的每個changeset。
 在dbchangelog.xml文件文件中,添加一個新的部門創建表變更集,如下所示
<changeSet id="1" author="bob"> 
        <createTable tableName="department">
            <column name="id" type="int">
            <constraints primaryKey="true" nullable="false"/> 
            </column> 
            <column name="name" type="varchar(50)">
            <constraints nullable="false"/>  
            </column>
            <column name="active" type="boolean"
            defaultValueBoolean="true"/> 
        </createTable>
   </changeSet>
 生成的sql語句如下
CREATE TABLE "department"
("id" number (*,0),
"name" VARCHAR2 (50 BYTE),
"active" NUMBER (1, 0) DEFAULT 1
 );
 執行 mvn liquidbase:update 指令    我們去數據庫看一下 create table    至此,更新數據庫功能完好

 DatabaseChangeLog 和 DatabaseChangeLogLock

   我們show一下table DatabaseChangeLog    select一下,會發現這個表記錄的是每次update的變更集以及用戶和時間等相關信息,用來更新和回滾     再show一下table DatabaseChangeLogLock    看下官網  Liquibase使用DATABASECHANGELOGLOCK表來確保一次只運行一個Liquibase實例。

 因為Liquibase只是從DATABASECHANGELOG表中讀取數據以確定需要運行哪些變更集

 所以如果對同一個數據庫同時執行多個Liquibase實例,則會發生沖突。

 如果多個開發人員使用同一個數據庫實例,或者集群中有多個服務器在啟動時自動運行Liquibase,則可能發生這種情況。

 所以這個表是用來鎖數據庫的,避免多個開發人員同一時刻操作數據庫的時候造成沖突  下圖是四個字段的用途     id和locked好理解,lockgranted指的是鎖庫日期,lockedby指的是被誰鎖定

 回滾 maven Rollback

 官方地址 https://docs.liquibase.com/tools-integrations/maven/commands/maven-rollback.html?Highlight=rollback  三種回滾模式
  • liquibase.rollbackCount - 按順序還原指定數量的變更集,從最新的變更開始,向后操作,直到達到指定的值
  • liquibase.rollbackTag -    還原被標記的數據庫所做的所有更改
  • liquibase.rollbackDate -  恢復數據庫所做的所有更改到指定的日期和時間
 指定變更集的數量的回滾
mvn liquibase:rollback -Dliquibase.rollbackCount=3
 被標記的變更集的回滾,update之前要打tag
mvn liquibase:rollback -Dliquibase.rollbackTag=version1
 在dbChangeLog.xml文件中打tag
<liquibase.tag>v3.2.1</liquibase.tag>
<liquibase.rollbackTag>${liquibase.tag}</liquibase.rollbackTag>
 指定日期的變更集回滾
mvn liquibase:rollback -Dliquibase.rollbackDate=2020-11-26


免責聲明!

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



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