flyway 4.0 java基础回调afterValidate没有抓住钩子

Posted

技术标签:

【中文标题】flyway 4.0 java基础回调afterValidate没有抓住钩子【英文标题】:flyway 4.0 java base callback afterValidate not catching the hook 【发布时间】:2016-08-15 07:43:43 【问题描述】:

我有基于 SQL 和 Java 的迁移。我正在尝试使用 Flyway 回调挂钩在验证完成后立即执行其他操作,但它没有捕获此回调。从documentation来看,好像就这么简单。

这是我的文件结构:

-java
--db
---migrations
----V1__apple   <----java based
--FruitShopFlywayCallback.java  <---- Callback class
-resources
--migrations
--- V1__orange.sql  <----sql based

我的回调:

public class FruitShopFlywayCallback extends BaseFlywayCallback 
    @Override
    public void afterValidate(Connection dataConnection) 
        System.out.println("it worksssssssss");
    

我的想法是,一旦迁移完成,flyway 就会回调到这个方法中。我不确定我错过了什么?

【问题讨论】:

你在flyway注册你的回调了吗?在基于 java 的迁移中,它应该通过方法 flyway.setCallbacks(FlywayCallback... callbacks) 来完成。 我不这么认为,我认为它是通过新更新自动完成的,所以我猜我应该在执行 flyway.migrate() 之前设置它 如何执行迁移?至于我,正确的做法是——init flyway -> setCallbacks -> validate -> migrate。有什么我错过的吗? 是的..非常感谢...做到了..我在这里找到了一个例子github.com/flyway/flyway/blob/… 我找到了相同的 :) 祝你好运! 【参考方案1】:

我只需要在初始化 flyway 时注册回调。 这就是我所做的。在那之后。它按预期工作

// Initializing Flyway
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);

flyway.setValidateOnMigrate(true);

// Register call back. 
FruitShopFlywayCallback callback = new FruitShopFlywayCallback();
flyway.setCallbacks(callback);

【讨论】:

【参考方案2】:

如果这有帮助。我正在寻找如何配置 Flyway 以使用 Maven 处理 Java 回调。您需要使用 Flyway 注册您的回调类(将 Flyway 与纯 Java 一起使用,您将使用 setCallbacks)。

在 Maven 中,这看起来像这样:

<plugin>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-maven-plugin</artifactId>
  <version>$flyway.version</version>
  <configuration>
    <driver>org.hsqldb.jdbcDriver</driver>
    <url>jdbc:hsqldb:file:$project.build.directory/db/flyway_sample;shutdown=true</url>
    <user>SA</user>
    <callbacks>
      <callback>example.MyCallback</callback>
    </callbacks>
  </configuration>
</plugin>

【讨论】:

以上是关于flyway 4.0 java基础回调afterValidate没有抓住钩子的主要内容,如果未能解决你的问题,请参考以下文章

迁移前的 Flyway 回调

在命令行中执行 flyway 回调

Scala 中的自定义 Flyway 回调

如何创建脚本或 Flyway 可以配置为每次使用 SQL 回调调用它?

如何在flyway migrate上回调?

Java基础学习总结(183)—— Flyway 在项目中迁移数据实践