【问题标题】:flyway outOfOrder is not working as expectedflyway outOfOrder 未按预期工作
【发布时间】:2014-06-16 19:43:03
【问题描述】:

我正在尝试使用 maven 在“生产支持”分支(即 V3.1)上应用 outOfOrder 迁移。 3.1 分支从 3.1.0.1 到 3.1.0.12 有 12 个迁移。前 11 个已应用,在我的开发环境中,我已经应用了从下一个版本 3.3 开始的两个迁移。信息如下所示:

+----------------+----------------------------+--- ------------------+----------+ |版本 |说明 |安装于 |状态 | +----------------+----------------------------+--- ------------------+----------+ | 1 | > | 2013-08-16 16:35:22 |成功 | | 3.1.0.1 | CCI DDL | 2013-08-16 16:41:04 |成功 | | 3.1.0.2 |更新 1 | 2013-08-19 12:17:43 |成功 | | 3.1.0.3 |添加 SVT 项目历史 | 2013-08-21 16:24:28 |成功 | | 3.1.0.4 |从 ED 中删除 Col 事件密钥 | 2013-08-27 14:15:36 |成功 | | 3.1.0.5 |添加工作开始时间 COL | 2013-10-10 14:59:14 |成功 | | 3.1.0.6 |更新 SVT 列长度 | 2013-10-23 10:25:33 |成功 | | 3.1.0.7 |将序列号添加到 EDC ECRF | 2013-12-03 14:59:31 |成功 | | 3.1.0.8 |设置 EDC ECRF ITEM Seq Numb | 2013-12-03 15:27:08 |成功 | | 3.1.0.9 |添加表 EDC USV FORM | 2013-12-03 15:37:47 |成功 | | 3.1.0.10 |添加表 SVT USV 表格 | 2013-12-03 15:52:24 |成功 | | 3.1.0.11 |添加表格 主题访问 Q | 2014-04-29 17:09:13 |订单外 | | 3.1.0.12 |添加表格 BOGUS ERIC TEST | |忽略 | | 3.3.0.1 |插入 iMedidata CRS 信息 | 2014-04-24 10:50:38 |未来 | | 3.3.0.2 |插入研究对象类型 | 2014-04-24 11:14:37 |未来 | +----------------+----------------------------+--- ------------------+----------+

我在 V3.1 分支的 mvn build 输出文件夹中运行以下命令: mvn flyway:migrate -Dflyway.outOfOrder=true -P

我得到以下输出:

[错误] 无法在项目 mdmws 上执行目标 org.flywaydb:flyway-maven-plugin:3.0:migrate (default-cli): org.flywaydb.core.api.FlywayException: 验证失败。发现应用迁移和可用迁移之间的差异:检测到类路径上缺少应用迁移:3.3.0.1 -> [帮助 1]

似乎想在同一个类路径的target/db/migrations文件夹中找到已经应用到数据库的3.3迁移,但是这些文件当然存在于更高版本的分支中。要么我缺少一些配置设置,要么我不理解 outOfOrder 的工作方式。我不想将这些文件从 V3.3 分支拉回 V3.1 分支。

有人可以帮忙解释一下吗?

我的 pom 从父 pom 继承以下内容,并且大部分配置值都是从配置文件中传入的:

      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <version>3.0</version>

    <configuration>
      <driver>${flyway.driver}</driver>
      <url>${flyway.url}</url>
      <user>${flyway.user}</user>
      <password>${flyway.password}</password>
      <outOfOrder>${flyway.outOfOrder}</outOfOrder>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>com.oracle.ojdbc</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
      </dependency>
    </dependencies>
  </plugin>

【问题讨论】:

    标签: flyway


    【解决方案1】:

    将validateOnMigrate 设置为false,您应该没问题。默认情况下,它将检查已解决的迁移和应用的迁移是否匹配。在您的特定情况下,这将不起作用,因此您必须禁用它。

    【讨论】:

      【解决方案2】:

      这就是我的解决方案。我在 Java 代码中配置了 flyway。是的,我设置了 validateOnMigrate - false。

      @Bean(name = "flyway")
      @Lazy(false)
      public Flyway buildConfiguredFlyway() {
          Flyway flyway = configure();
          if (!validate(flyway)) {
              migrate(flyway);
          }
          return flyway;
      }
      
      private Flyway configure() {
          Flyway flyway = new Flyway();
          flyway.setDataSource(datasource);
          flyway.setBaselineOnMigrate(true);//Create meta-data table if it did not exist.
          flyway.setValidateOnMigrate(false);
      
          return flyway;
      }
      
      private boolean validate(Flyway flyway) {
          try {
              flyway.validate();
              return true;
          } catch (FlywayException o) {
              return false;
          }
      }
      
      private void migrate(Flyway flyway) {
          try {
              int result = flyway.migrate();
              LOGGER.info("Number of DB mirgations successfully applied: " + result);
          } catch (FlywayException e) {
              LOGGER.error(e.getMessage(), e);
              ((ConfigurableApplicationContext) applicationContext).stop();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2022-01-24
        • 2015-05-11
        • 2020-05-15
        • 2014-10-31
        • 2018-02-12
        • 2014-01-20
        • 2015-01-13
        • 2013-08-01
        相关资源
        最近更新 更多