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 = 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/

相关文章:

java - 仅迁移 Flyway 迁移的子集

飞行路线位置属性尚未设置

java - 无法在 Spring Boot 中将 Flyway 迁移与 postgresQL 连接

java - 为什么我在使用 Retrofit 和 GSON 转换器映射的对象属性上得到空值?

java - 当我使用改造时,由 : java. lang.NoSuchFieldError : com. squareup.okhttp.internal.http.HttpMethod.METHODS 引起

java - 我的表单上的 Spring WebFlow2 中的每个转换是否需要隐藏按钮

java作为脚本语言?

java - 将顶点药水转换为相对于美利坚合众国的比例的公式?

gradle - 如何向 flyway build.gradle 文件添加参数?

使用 Spring Boot 记录 Flyway sql