当前位置: 首页 > 知识库问答 >
问题:

传单输出顺序未按预期工作

东门修能
2023-03-14

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

+----------------+----------------------------+---------------------+---------+
| Version        | Description                | Installed on        | State   |
+----------------+----------------------------+---------------------+---------+
| 1              | >          | 2013-08-16 16:35:22 | Success |
| 3.1.0.1        | CCI DDL                    | 2013-08-16 16:41:04 | Success |
| 3.1.0.2        | Update 1                   | 2013-08-19 12:17:43 | Success |
| 3.1.0.3        | Add SVT ITEM HISTORY       | 2013-08-21 16:24:28 | Success |
| 3.1.0.4        | Drop Col Event Key From ED | 2013-08-27 14:15:36 | Success |
| 3.1.0.5        | Add Job Begin Time COL     | 2013-10-10 14:59:14 | Success |
| 3.1.0.6        | Update SVT Column Lengths  | 2013-10-23 10:25:33 | Success |
| 3.1.0.7        | Add Seq Number to EDC ECRF | 2013-12-03 14:59:31 | Success |
| 3.1.0.8        | Set EDC ECRF ITEM Seq Numb | 2013-12-03 15:27:08 | Success |
| 3.1.0.9        | Add Table EDC USV FORM     | 2013-12-03 15:37:47 | Success |
| 3.1.0.10       | Add Table SVT USV FORM MAP | 2013-12-03 15:52:24 | Success |
| 3.1.0.11       | Add Tables SUBJECT VISIT Q | 2014-04-29 17:09:13 | OutOrde |
| 3.1.0.12       | Add Table BOGUS ERIC TEST  |                     | Ignored |
| 3.3.0.1        | Insert iMedidata CRS Info  | 2014-04-24 10:50:38 | Future  |
| 3.3.0.2        | Insert Study OBJECT TYPE   | 2014-04-24 11:14:37 | Future  |
+----------------+----------------------------+---------------------+---------+

我在 V3.1 分支中的 mvn 构建输出文件夹中运行以下命令: mvn 飞行方式:迁移 -Dflyway.outOfOrder=真 -P

我得到以下输出:

[错误]未能在项目上执行目标组织:飞行方式专家插件:3.0:迁移(默认-cli): 组织.发现已应用的迁移和可用迁移之间的差异:类路径上缺少检测到的应用迁移:3.3.0.1 -

它似乎想在同一个类路径target/db/migrations文件夹中找到已经应用于数据库的3.3迁移,但是当然这些文件存在于更高版本的分支中。要么是我遗漏了一些配置设置,要么是我不理解乱序的工作方式。我不想将这些文件从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>

共有2个答案

孙志
2023-03-14

这就是我的解决方案。我用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();
    }
}
孙明德
2023-03-14

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

 类似资料:
  • 我已经创建了一个通用的Spring批处理作业,用于处理数据并存储到CSV中。我需要从读取器传递到写入器的一些数据,这是我试图使用JobExecution来做的。然而令人惊讶的是,代码似乎首先调用getWriter()而不是getReader()函数。下面给出了我的配置。有人能解释为什么会发生这种情况,以及是否有其他方法将数据从读取器传递到写入器。 我想从读取器传递到写入器的数据是CSV的列名。由于

  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。

  • 我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:

  • 我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里