我想仅替换存在的值(如果不存在,我想跳过它)。
示例:
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});
如果您想要内置支持,您应该 create an issue on Flyway's GitHub page .
关于java - Flyway占位符存在值时如果不存在则跳过占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60255011/