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没有抓住钩子的主要内容,如果未能解决你的问题,请参考以下文章