gpt4 book ai didi

java - 迁移前的 Flyway 回调

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:44 26 4
gpt4 key购买 nike

我有一个 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 表已经存在”。

最佳答案

正如其他人评论的那样,您的问题并不完全清楚。因为 flyway 递归地发现架构的更改,所以在回调中更改文件名会导致第二次迁移。我怀疑您的历史记录会告诉您第一次迁移是在运行前准备的,第二次迁移是在您运行期间准备的,然后两者都已执行。

您似乎正在运行旧版本的 Flyway,并且您正在尝试使用特定版本号初始化架构。如果是这种情况,您可以避免回调并通过配置文件执行此操作 documented:

flyway.sqlMigrationPrefix版本化 SQL 迁移的文件名前缀(默认值:V)版本化 SQL 迁移具有以下文件名结构:prefixVERSIONseparatorDESCRIPTIONsuffix,使用默认值转换为 V1_1__My_description.sql

请注意,您在“FooScript.sql”之前有一个下划线字符。为此,您需要更改 default sqlMigrationSeparator

关于java - 迁移前的 Flyway 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com