飞行路线无法识别正确的占位符"${"



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

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

错误:无法分析中的语句D: \软件\ 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对其占位符${somestring}使用了特定的语法。在您的代码中,你有一个${,但它并没有定义占位符。虽然Flyway是一个非常复杂的工具,但这里的机制只是使用字符串匹配。如果你想,你可以修改你的Flyway实例,为占位符使用不同的转义符。如果你的代码中必须有与之匹配的字符串,这可能会很方便${语法。你可以在这里阅读。向下滚动到定义PlaceHolderPrefix和PlaceHolderSuffix的位置。将它们更改为代码中未使用的不同值组合,你应该会没事的。

最新更新