在命令行中执行 flyway 回调

Posted

技术标签:

【中文标题】在命令行中执行 flyway 回调【英文标题】:Execute a flyway callback in command line 【发布时间】:2018-05-08 09:17:47 【问题描述】:

我在 docker 容器中使用 flyway 命令行来应用我的迁移脚本。我现在必须在我的实现中添加一个 Java 回调。回调可以通过flyway-maven-plugin成功检测并启动,pom.xml中有<callback>定义。我生成了这个项目的 JAR。

我现在想用命令行运行它。以下命令有效,我的 SQL 迁移已应用

flyway repair migrate 
    -locations=path/to/sql/migration
    -url=...

如果我以这种方式添加回调,它会告诉我以下错误

flyway repair migrate 
    -locations=path/to/sql/migration 
    -callbacks=com.company.MyCallback
    -url=...

无法实例化类“com.company.MyCallback”

我也尝试了 jarDirs 选项,但同样的错误

flyway repair migrate 
    -locations=path/to/sql/migration 
    -jarDirs=/folder/containing/the/jar/i/generated
    -callbacks=com.company.MyCallback
    -url=...

但没有结果。任何帮助或提示将不胜感激!

【问题讨论】:

-X 上使用调试选项运行以查看它在哪里搜索迁移文件和jar。 【参考方案1】:

根据文档,-jarDirs 开关支持您尝试的修复和迁移命令以及文档状态

jarDirs 默认值:install-dir/jars 逗号分隔的目录列表,包含 JDBC 驱动程序和基于 Java 的迁移

但这在加载自定义回调时不起作用。自定义回调似乎仅从 $FLYWAY_HOME/jars 加载。

我使用从org.flywaydb.core.api.callback.BaseFlywayCallback 扩展的简单回调进行了一些测试,它似乎工作正常。

希望这能解决您的问题。

【讨论】:

以上是关于在命令行中执行 flyway 回调的主要内容,如果未能解决你的问题,请参考以下文章

Flyway Java 迁移在命令行工具中不起作用

Mac 命令行中添加命令直接调用可执行文件

如何使用 Python 3.x 在命令行中执行多个命令

Flyway 命令行:无效参数:-placeholders

在单行命令行中执行多行语句?

尝试在命令行中静默执行自解压 zip 文件