Flyway占位符当存在值时,如果不退出,它将跳过替换占位符



如果不存在,我只想替换holder值,我想跳过它。

示例:

1 V1__customer.sql

insert into customer(id,name) values(1, ${name});

2 V2__staff.sql

insert into staff(id,age) values(1, ${age});

代码

ThreadLocalContextUtil.setInstance(instance);
final var flyway = new Flyway();
flyway.setDataSource(Datasource.class);
flyway.setLocations("instance_db");
flyway.setOutOfOrder(true);
flyway.setValidateOnMigrate(false);
flyway.getPlaceholders().put("name", "mr empty");
applyProperties(flyway);
flyway.migrate();

问题:如何仅在姓名上替换,对于年龄跳过它。

这个用例实际上并不受支持。如果Flyway发现一个占位符令牌没有相应的值,它将产生一个错误。不过,我能想出一个变通办法。

你可以用空字符串"播种"占位符。这将阻止Flyway对未设置的值产生错误。

在迁移脚本中,您可以引入只有在提供值时才运行的保护条件。

例如,在Java中:

// Seed with empty strings
flyway.getPlaceholders().put("name", "");
flyway.getPlaceholders().put("id", "");
...
// Overwrite some of the placeholders
flyway.getPlaceholders().put("name", "mr empty");

然后在您的脚本(伪代码(中:

IF '${name}' NOT EQUAL TO '' THEN
insert into customer(id,name) values(1, ${name});

如果你想要内置支持,你应该在Flyway的GitHub页面上创建一个问题。

最新更新