Java 存在时的Flyway占位符值如果不退出,将跳过replaceholder

Java 存在时的Flyway占位符值如果不退出,将跳过replaceholder,java,flyway,Java,Flyway,我只想替换存在的值,如果不存在,我想跳过它 例如: 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 =

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

例如:

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");
然后在脚本(伪代码)中:


如果您想要内置支持,您应该。

我知道您的想法,但其中一些与我的逻辑代码有关,我需要在运行时将其替换。您还有其他解决方案吗?这不是Flyway支持的功能。在GitHub页面上创建一个问题,请求它:。这将使我们的雷达,并允许其他人帮助解决问题。
IF '${name}' NOT EQUAL TO '' THEN
insert into customer(id,name) values(1, ${name});