Flyway:校验和和可重复的Java迁移



我在 Flyway 4.2.0 中遇到可重复的 Java 迁移问题。

例如,我编写了一个可重复的 Java 迁移,它为每个具有特定列的表创建一个触发器。此迁移的校验和提供程序计算缺少触发器的表的串联名称的哈希代码。

@Override
public int getChecksum(Connection conn) throws SQLException {
return queryTableNames(conn).stream().collect(Collectors.joining(",")).hashCode();
}
  • 当表列表为空时,哈希码为零,不应执行任何操作。

  • 当表列表不为空时,哈希码不同于零(命名为 xxx),并且对于每个表,都会向数据库添加一个合适的触发器。 在这种情况下,hascode xxx 被写入 "schema_version"。 下次执行 flyway:info 时,它会显示过时的迁移,因为所有触发器都存在,并且新的校验和为零。所以我必须做一个"飞行路线:修复"或一个额外的"飞行路线:迁移"来获得一个干净的桌子"schema_version"。

在 Java 可重复迁移后,是否有一个简单的机会来更新校验和?

我检查了FlywayCallback.afterEachMigrate,但对MigrationInfo只有只读访问权限。使用这种方法的进一步步骤将使用过多的飞行路线内部(即单独更新"schema_version")。

实现自己的迁移解析程序与自定义迁移执行器相结合似乎太重量级了。

校验和的定义是错误的。校验和应引用当前目标状态。

在示例中,方法queryTableNames()应返回具有此类触发器的所有表,并且迁移应使用所需的触发器完成这些表。

最新更新