【发布时间】:2017-11-26 16:57:32
【问题描述】:
我在 Flyway 4.2.0 中遇到可重复 Java 迁移的问题。
例如,我编写了一个可重复的 Java 迁移,它为每个具有特定列的表创建一个触发器。此迁移的 ChecksumProvider 计算缺少触发器的表的串联名称的哈希码。
@Override
public int getChecksum(Connection conn) throws SQLException {
return queryTableNames(conn).stream().collect(Collectors.joining(",")).hashCode();
}
当表列表为空时,哈希码为零,不应该做任何事情。
当表列表不为空时,哈希码不为零(将其命名为 xxx),并且为每个表添加一个合适的触发器到数据库中。 在这种情况下,hascode xxx 被写入“schema_version”。 下次执行 flyway:info 时,它显示了一个过时的迁移,因为所有触发器都存在并且新的校验和为零。所以我必须做一个“flyway:repair”或一个额外的“flyway:migrate”来获得一个干净的表“schema_version”。
在 Java 可重复迁移后是否有简单的机会自动更新校验和?
我检查了 FlywayCallback.afterEachMigrate,但只有对 MigrationInfo 的只读访问权限。使用这种方法的进一步步骤将使用过多的飞行路径内部(即单独更新“schema_version”)。
实现一个自己的 MigrationResolver 加上一个自定义的 MigrationExecutor 似乎太重了。
【问题讨论】:
标签: flyway