簡體   English   中英

如何在 Spring Boot 應用程序中使用 Liquibase 更新數據庫?

[英]How to update database using Liquibase in Spring boot application?

我在 Spring Boot 應用程序中為數據庫提供了以下 liquibase 配置。

在此處輸入圖像描述

最初,這些 YAML 腳本是在應用程序啟動並創建數據庫時執行的,現在我想更新一列的數據類型,所以我需要使用列配置更新現有的 create-tables.YAML 還是需要創建另一個文件一個不同的名稱並在“db.changelog-master.yaml”文件中添加條目。

請推薦,謝謝

您必須創建不同的更改日志並且需要添加到主文件中

使用 Liquibase 的最佳實踐

組織變更日志:創建一個沒有實際變更集但包含其他變更日志的主變更日志文件(僅使用包含的 YAML、JSON 和 XML 支持,SQL 不支持)。 這樣做可以讓我們在不同的變更日志文件中組織我們的變更集。 每次我們向需要更改數據庫的應用程序添加新功能時,我們都可以創建一個新的更改日志文件,將其添加到版本控制中,並將其包含在主更改日志中。

每個變更集一個變更:每個變更集只有一個變更,因為這樣可以在應用變更集失敗的情況下更輕松地回滾。

不要修改變更集:一旦執行了變更集,就不要修改它。 相反,如果需要對已由現有 changeSet 應用的更改進行修改,請添加新的 changeSet。 Liquibase 會跟蹤它已經執行的變更集的校驗和。 如果修改了已經運行的 changeSet,默認情況下 Liquibase 將無法再次運行該 changeSet,並且不會繼續執行其他 changeSet。

樣品設置

目前,我使用 SQL 格式的 liquibase 更改日志,但您可以使用 XML、YAML 或任何其他格式。

test_schema.sql

<?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-4.3.xsd">
    <include file="schemas/test_schema.sql" relativeToChangelogFile="true"/>
</databaseChangeLog>

更改日志-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-4.3.xsd"> <include file="schemas/test_schema.sql" relativeToChangelogFile="true"/> </databaseChangeLog>

目錄設置

[![directory_setup][1]][1]

酸: https ://reflectoring.io/database-migration-spring-boot-liquibase/

正如你可以在這里讀到的,

Liquibase 為您的數據庫提供版本控制

,Liquibase 變得如此流行的主要原因是它允許在數據庫上應用某種類型的版本控制。

為此,您需要始終將數據庫中的更改記錄到更改日志中。

所以 Liquibase 項目的一個例子將有

  1. 創建初始表-changelog.xml

  2. update-schema-10-5-22.changelog.xml

  3. 更新數據15-5-22.changelog.xml

  4. update-schema-10-6-22.changelog.xml

  5. update-data-15-6-22.changelog.xml

每個帶有更改的更改日志文件都可以根據主要更改的表示來命名(此處使用日期僅用於簡化)。

然后用戶可以使用版本控制系統(如 git),例如,當用戶簽出過去的提交(前 15/05/2022 上的提交 A)時,他可以查看該版本上的數據庫,因為它存在2022 年 5 月 15 日,因為 liquibase 將僅執行該提交中存在的腳本,即create-initial-tables-changelog.xmlupdate-schema-10-5-22.changelog.xmlupdate-data-15-5-22.changelog.xml

此外,所有變更日志文件都需要在特定版本的主變更日志文件中引用,因為該文件用於在請求時在數據庫中執行腳本。

主變更日志文件用作配置文件,它將保存對所有其他變更日志的所有引用。 您的主變更日志文件必須采用 XML、YAML 或 JSON 格式。 來自文檔

說了這么多,現在我可以回答你的問題了

所以我需要使用列配置更新現有的 create-tables.YAML 還是需要創建另一個具有不同名稱的文件

您使用 Liquibase 的主要原因可能是對數據庫進行版本控制。 如果您希望尊重這個原因,那么您必須創建一個不同的變更日志文件,該文件將是與存在的初始版本不同的數據庫版本的快照。

此外,例如,如果您有初始的create-tables-changelog.xml ,然后您還有 3 個在數據庫中應用更改的changelog.xml文件,那么您不能只在create-tables-changelog.xml中進行更改,因為這可能會導致 3 個下一個文件changelog1.xmlchangelog2.xmlchangelog3.xml的執行中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM