如果不存在,我只想替换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页面上创建一个问题。