Une application qui utilise Gradle et flyway pour la migration de base de données J'ai fait un essai et une erreur lorsque j'ai écrit le rappel en Java.
L'essentiel est que vous devez compiler la classe Callback avant d'exécuter la tâche flyway.
Veuillez vous référer au référentiel suivant pour le code vérifié cette fois. https://github.com/mahaker/flyway-callback-java
Java: OpenJDK 11 Gradle: 5.2.1 flyway: 6.4.2 Postgres: 12
ʻOrg.flywaydb.core.api.callback.Callback` Créer une classe qui implémente l'interface Définissez la propriété flyway.callbacks sur un nom complet. https://flywaydb.org/documentation/api/hooks#java-based-callbacks
Assurez-vous également que la tâche de classes est exécutée avant la tâche de voie de migration. * Ceci est important </ b> (Pour être exact, est-ce une tâche de compilation Java?)
FillTestData.java
package db.migration;
import java.sql.PreparedStatement;
import org.flywaydb.core.api.callback.Callback;
import org.flywaydb.core.api.callback.Context;
import org.flywaydb.core.api.callback.Event;
public class FillTestData implements Callback {
@Override
public boolean supports(Event event, Context context) {
return Event.AFTER_MIGRATE.equals(event);
}
@Override
public boolean canHandleInTransaction(Event event, Context context) {
return false;
}
@Override
public void handle(Event event, Context context) {
try (
final PreparedStatement statement = context
.getConnection()
.prepareStatement("INSERT INTO PERSON(ID, NAME, AGE) VALUES (1, 'userA', 20), (2, 'userB', 22)")
) {
statement.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
build.gradle
//Extrait uniquement ce dont vous avez besoin
plugins {
id "org.flywaydb.flyway" version "6.4.2"
}
group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 11
flyway {
url = 'jdbc:postgresql://localhost:15432/exampledb'
user = 'postgres'
password = 'example'
locations = [ 'filesystem:./src/main/resources/db/migration/' ]
callbacks = [ 'db.migration.FillTestData' ]
}
// !!Important! !!
flywayClean.dependsOn(classes)
flywayMigrate.dependsOn(classes)
Lorsque vous exécutez la migration, vous pouvez voir que l'instruction d'insertion a été exécutée.
Cette méthode a été enseignée par une personne à l'intérieur de la voie de migration. https://github.com/flyway/flyway/issues/2829
Recommended Posts