2016-04-21 3 views
6

У меня есть как SQL, так и Java-ориентированные миграции. Я пытаюсь использовать крючок обратного вызова Flyway, чтобы сделать что-то еще сразу после проверки, но он не улавливает этот обратный вызов. Из documentation кажется, что это так просто, как следующее.flyway 4.0 java base callback afterValidate не поймать крючок

Вот моя структура файла:

-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"); 
    } 
} 

Моя мысль, что после того, как миграция будет сделано, пролетный путь собирался обратного вызова в этот метод. Я не был уверен, что мне не хватает?

+2

Вы зарегистрировали свой обратный звонок в пролетном пути? В переходах на основе java это должно выполняться методом flyway.setCallbacks (FlywayCallback ... callbacks). – merz

+0

Я так не думаю, я думал, что это было сделано автоматически с новым обновлением, поэтому я предполагаю, что должен установить это, прежде чем я сделаю flyway.migrate() – AirWick219

+0

Как вы выполняете миграцию? Что касается меня, вернемся к этому - init flyway -> setCallbacks -> validate -> migrate. Я что-то пропустил? – merz

ответ

3

Мне просто нужно, чтобы зарегистрировать обратный вызов при инициализации пролетный путь. Вот что я сделал. После этого. он работает как ожидалось

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

flyway.setValidateOnMigrate(true); 

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

В случае, если это будет полезно. Я искал, как настроить Flyway для работы с Java-обратными вызовами с использованием Maven. Вам необходимо зарегистрировать свои классы обратного вызова с помощью Flyway (используя Flyway с чистой Java, вы будете использовать setCallbacks).

В мавена это выглядит примерно так:

<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>