如果占位符更改,则可重复的飞路迁移将不会再次运行

时间:2016-12-20 12:15:25

标签: flyway

我正在使用可重复的飞行路线迁移来进行一些数据修改,在这种情况下应该多次运行。我在迁移.sql代码的注释中放置了一个占位符值,如$ {TRIGGER_DATA_UPDATE}。我们的想法是从flyway.conf(或改变flyway.conf的bash脚本)中更改此占位符值,并使可重复的迁移运行。

据我所知,更改占位符不会导致可重复的迁移再次运行。它只会运行一次。看起来校验和计算没有考虑占位符值。

这是一个功能还是一个错误?

相反,如果我在可重复迁移中直接编辑注释,则会检测到更改,并且迁移将在下一次调用flyway时运行。

这是可重复的迁移.sql文件:

    -- The following line will trigger execution of this script appropriately when upgrade.shis executed
    /* ${TRIGGER_DATA_UPDATE} */
    UPDATE  restcomm_accounts SET password = auth_token, password_algorithm = 'md5' WHERE password IS NULL;

TRIGGER_DATA_UPDATE是占位符值。

这是flyway.conf的重要部分:

    flyway.placeholders.TRIGGER_DATA_UPDATE=this_part_changes

1 个答案:

答案 0 :(得分:0)

你是对的,校验和计算是在文件内容上(仅限)。这似乎是设计上的; to Husky UI/JVM

作为一种解决方法,您可以将其放入SqlMigrationResolver.java并让它有条件地运行。我假设你在命令行(正如你提到的bash)所以它将被放入afterMigrate.sql。您需要使用数据库的编程语言(例如PLSQL)或使用where语句创造性。确保打开debug(-X)以便记录回调。即使迁移没有实际运行任何迁移(即没有待处理的),它也会被执行。

尝试以下方法:

-- The following line will trigger execution of this script appropriately when upgrade.shis executed
UPDATE  restcomm_accounts SET password = auth_token, password_algorithm = 'md5' WHERE password IS NULL
AND '${TRIGGER_DATA_UPDATE}' = 'Y'
;