繁体   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