【问题标题】:Disabling Flyway Placeholder Validation禁用 Flyway 占位符验证
【发布时间】:2023-03-25 20:55:02
【问题描述】:

所以我在升级 flyway 版本后因为一些要求而理解的是 flyway-core-2.2 引入了对 Flyway 占位符的一些验证。

现在,占位符语法的约定是 ${name} 在大多数库中都是统一的。在我们的迁移脚本中,我们在 mysql 表列中插入了一个名为 stretchySql 的字符串,该字符串包含我们自己的一些占位符元素,这些元素将在运行时由应用程序层进行解释。

UPDATE `stretchy_parameter` SET `parameter_sql`='select r.id as report_id from stretchy_report r where r.report_category = \'${reportCategory}\'

我不希望 flyway 将嵌入在字符串中的内容解释为自己的占位符并引发错误。所以基本上,有什么方法可以关闭 flyway 占位符验证(因为我们不使用它)而不恢复到旧版本?

【问题讨论】:

    标签: flyway


    【解决方案1】:

    从 Flyway 3.2.1 开始(不确定何时引入),有一个名为 flyway.placeholderReplacement 的新布尔设置,默认为 true,您可以使用它来有效地禁用该功能。在 API 上,可以通过 Flyway 对象的 setPlaceholderReplacement(value)isPlaceholderReplacement() 方法访问它。

    我知道 2.2 可能没有该选项,并且接受的答案可能是解决它的最佳方法,但我认为此替代方案可能对遇到此页面的较新版本的用户有用。

    【讨论】:

      【解决方案2】:

      虽然您无法禁用它,但您可以将占位符前缀或后缀设置为永远不会匹配的内容。这将有效地实现相同的目标。

      http://flywaydb.org/documentation/api/javadoc/org/flywaydb/core/Flyway.html#setPlaceholderPrefix(java.lang.String)

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-16
      • 2011-07-09
      • 2021-07-17
      • 2021-08-24
      • 2020-12-13
      • 1970-01-01
      • 2011-05-23
      • 2012-04-02
      相关资源
      最近更新 更多