【问题标题】:Liquibase did not execute changelog file by dependency orderLiquibase 没有按依赖顺序执行更改日志文件
【发布时间】:2020-01-15 00:13:53
【问题描述】:

我们的项目有多个模块。我们为每个模块创建了 databasechangelog 文件。 Liquibase 是按字母顺序而不是模块依赖顺序执行这些文件的。 例如

Project
 |
 Module1
 |
 | - domain
 |   | - foo1
 |  
 | - Changelogfile1.xml  
 Module2
 |
 | - domain
 |   | - foo2
 |   
 | - Changelogfil2.xml
 Module3
 |
 | - domain
 |   | - foo3
 | 
 | - Changelogfile3.xml

我的 master.xml 文件如下所示

...
<includeAll path="classpath*:${path}/x.x.x"/>
...
  1. Changelogfile1.xml 包含 foo1 表创建变更集信息及其约束定义变更集
...
<changeSet author="****" id="1">
 <createTable tableName="foo1">
    <column name="id" type="BIGINT">
    ...
     <column name="foo2_id" type="INT">
     ...
  </createTable>
</changeSet>
....
<addForeignKeyConstraint baseColumnNames="foo2_id" baseTableName="foo1"
constraintName="name" deferrable="false" initiallyDeferred="false" 
referencedColumnNames="id" referencedTableName="foo2"/>
....
...
  1. Changelogfile2.xml 包含 foo2 表创建变更集信息及其约束定义变更集
...
<changeSet author="****" id="1">
 <createTable tableName="foo2">
    <column name="id" type="BIGINT">
     ...
     ...
     ...
  </createTable>
</changeSet>
  1. Changelogfile3.xml 包含 foo3 表创建变更集信息及其约束定义变更集
  2. 这里的 Module1 依赖于 Module2。表 foo1 与 foo2 表有 OnetoOne 关系

Liquibase 已按以下顺序执行更改日志文件

  1. 变更日志文件1
  2. 更改日志文件2
  3. 更改日志文件3

我希望 liquibase 应该按照以下顺序执行

  1. 更改日志文件2
  2. 变更日志文件1
  3. 更改日志文件3

liquibase 是否有任何选项将按其依赖顺序执行数据库更改日志文件?

【问题讨论】:

    标签: liquibase dbmigrate


    【解决方案1】:

    不,Liquibase 无法确定变更集的“正确”顺序。这取决于用户将它们按正确的顺序排列。

    有几种技术可以做到这一点。许多人只有一个包含所有变更集的changelog.xml。其他人将拥有一个包含其他变更日志的主变更日志文件,然后他们将使用文件命名约定,其中前 3 或 4 个字符是数字,例如0001_add_customer_table.xml,然后是0002_add_customer_table_constraints.xml。如果使用这样的约定,您可能希望在以 0010、0020、0030 等开头的地方使用“跳过编号”,以便在(希望如此)极少数情况下,您需要在其他两个之间插入变更集例如,变更集,您将有空间添加 0015。

    【讨论】:

      【解决方案2】:

      使用includeAll时会发生这种情况,为避免此类问题,我将所有文件单独添加到我想要的顺序中,从而解决了问题。

      <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.2.xsd">
      
      <include file="db/changelog/changes/version/db.changelog.test-v1.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v2.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v3.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v4.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v5.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v6.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v7.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v8.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v9.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v10.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v11.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v12.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v13.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v14.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v15.sql"/>
      <include file="db/changelog/changes/version/db.changelog.test-v16.sql"/>
      

      【讨论】:

        猜你喜欢
        • 2017-02-28
        • 1970-01-01
        • 2018-12-07
        • 2020-02-12
        • 1970-01-01
        • 2021-01-18
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多