【问题标题】:Flyway fails in recognizing correct placeholder "${"Flyway 无法识别正确的占位符“${”
【发布时间】:2020-12-14 00:51:27
【问题描述】:

我最近一直在尝试将 flyway 从 v4 升级到 v6.5.3。在此过程中,我遇到了与占位符有关的问题。

迁移失败并出现以下错误。

错误:无法解析语句 D:\Softwares\flyway-commandline-6.5.5-windows-x64\flyway-6.5.5\sql\V3__mysql-7.0.sql 在第 101 行第 1 列。见 https://flywaydb.org/documentation/knownparserlimitations 了解更多 信息:没有为占位符提供值:${')、NOW()、NOW())}。 检查你的配置!原因:没有提供价值 占位符:${')、NOW()、NOW())}。检查您的配置!

SQL,

insert into `configuration`(key, value, created_date , updated_date) values('LOG_LOCATION', REPLACE('${MY_LOG_LOCATION}','#{','${'), NOW(), NOW());

为了解决上述故障,我将“${”替换为“$\{”,但这是我没有注意的。
在调试flyway代码时,我看到它在解析SQL时失败(在验证期间,方法org.flywaydb.core.internal.parser.Parser.readToken())。

为什么要把 REPLACE 函数的第三个参数当作占位符?

注意:以上 SQL 在 Flyway v4 中有效

【问题讨论】:

    标签: flyway


    【解决方案1】:

    如果您阅读documentation here,您会发现flyway 使用特定语法作为占位符${somestring}。在您的代码中,您有一个 ${,但它没有定义占位符。虽然 Flyway 是一个非常复杂的工具,但这里的机制只是使用字符串匹配。如果需要,您可以修改 Flyway 实例以使用不同的转义字符作为占位符。如果您的代码中必须有与 ${ 语法匹配的字符串,这可能会很方便。 You can read about that here。向下滚动到您定义 PlaceHolderPrefix 和 PlaceHolderSuffix 的位置。将它们更改为代码中未使用的不同值组合,应该没问题。

    【讨论】:

    • 它可以在旧版本 (v4) 中正常工作,所以我猜它还有更多功能。如果我理解有误,请纠正我。
    • 我不熟悉旧版本的软件。我认为这不适用于您,但您也可以通过命令行禁用替换:flywaydb.org/documentation/commandline/…
    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2020-06-30
    • 2018-06-27
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多