【问题标题】:Spring Boot & Liquibase by ExampleSpring Boot 和 Liquibase 示例
【发布时间】:2018-07-25 12:29:39
【问题描述】:

这里是 Spring Boot 和 MySQL。试图让我的 Spring Boot 应用程序使用 Liquibase 进行数据库迁移,并在文档中查看 Spring Boot has built-in support for Liquibase

但是在阅读了这些文档之后,我有几个相关的问题:

  • db/changelog/db.changelog-master.yaml 文件的基本用途是什么?是存储 Liquibase 配置(决定 Liquibase 的行为方式),还是我应该放置实际的顺序 SQL 更改(“迁移”)本身?
    • 理想情况下,我希望有一个 src/main/resources/migrations 目录并将我的迁移更改存储为单独的 SQL 文件,如下所示:
    • src/main/resources/migrations/001-schema.sql
    • src/main/resources/migrations/002-init.sql
    • src/main/resources/migrations/003-changing-account-types.sql
    • ...等。 是否可以通过 Spring Boot 配置 Liquibase 来执行此操作?
  • Spring Boot 何时运行这些 Liquibase 迁移?在应用程序启动时?如果 Spring Boot 应用程序实际上运行在一个节点集群上(比如负载平衡 URL 后面的 5 个节点),该怎么办? Spring Boot 会在每个节点上运行 5 次 Liquibase 吗?或者它是否以某种方式感觉到一个节点是“主迁移器”等?

【问题讨论】:

    标签: spring-boot database-migration liquibase


    【解决方案1】:

    db/changelog/db.changelog-master.yaml 文件是使用默认配置时在应用程序启动时执行的文件。在该文件中,您可以有顺序的 SQL 更改以及对其他文件的包含。例如,该文件可能包含这样的内容(xml 语法)

    <include file="migrations/001-schema.sql"/> 
    <include file="migrations/002-init.sql"/> 
    <include file="migrations/003-changing-account-types.sql"/> 
    

    你会得到你想要的配置。

    关于您的第二个问题 - 是的,它们在启动时应用。如果它在节点集群上运行,它们将分别检查状态并将更改应用到数据库(如果尚未应用)(databasechangelog 和 databasechangelock 表用于此目的,它们确保更改只应用一次)

    yaml 语法示例

    databaseChangeLog:
    - include:
        file: migrations/001-schema.sql
    - include:
        file: migrations/002-init.sql
    - include:
        file: migrations/003-changing-account-types.sql
    

    【讨论】:

    • 感谢@Janar (+1) 关于&lt;include file .../&gt; 操作的一个简单问题。你是说我可以将它们添加到db.changelog-master.yaml 文件中吗?我发现 evidence here on SO 不能在 YAML 文件中包含文件。有任何想法吗?再次感谢!
    • 是的,您可以将它们添加到db.changelog-master.yaml 文件中。该答案要么已过时,要么不适用于 liquibase。我将语法示例更改为 .yaml 文件一(上一个用于 .xml 文件)
    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 2022-01-12
    • 2017-11-24
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多