【发布时间】:2018-10-28 08:11:16
【问题描述】:
我有一个 flyway 项目,我想在运行对数据库的迁移之前运行 java 回调来更改某些 sql 文件的名称。不幸的是,迁移首先针对数据库运行,然后触发回调以更改文件名。
这是我的回调类:
public class FooCallback extends BaseFlywayCallback {
@Override
public void beforeMigrate(final Connection connection) {
//rename file from V_1_FooScript.sql to V_05172018_FooScript.sql
}
}
但在schema_version 表中,我看到以下条目:
description type script checksum
FooScript SQL V_1__FooScript.sql 1473655428
应该说
description type script checksum
FooScript SQL V_05172018_FooScript.sql 1473655428
我如何在运行迁移之前获得flyway来更改文件名?
编辑 1:看起来 flyway 正在运行迁移,然后执行回调以更改文件名,然后由于文件名更改而再次运行迁移,但尝试运行时失败第二次是因为脚本正在创建一个表,所以当它第二次运行时它只是说“Foo 表已经存在”。
【问题讨论】:
-
为什么不开始重命名呢?
-
这里的用例是什么?您如何运行迁移?为什么不在迁移之前执行代码重命名?
-
值得注意的是,BaseFlywayCallback 在当前版本的 Flyway 中已弃用 - 现在需要实现 Callback。
-
请注意,如果您尝试使用此功能来动态更改名称,它将破坏 flyway 的无能,因为它会将新更改的文件检测为新文件。这可能会导致它在不同的环境中以不同的顺序运行...