2011-07-11 8 views
0

J'ai 2 fichiers: structure db, et fichiers sq de données db. (nous ne faisons pas partie du projet pour lequel nous sommes en train de créer des fichiers alt).Flyway - drop db, create db

Existe-t-il un moyen d'exécuter ces fichiers avant la génération à chaque fois que l'un d'entre eux a changé en utilisant maven?

La seule idée que je ai est de renommer les fichiers (apporter la version) après chaque changement à eux en s'assurant que flyaway va le ramasser.

Existe-t-il un moyen plus intelligent, en utilisant peut-être API ou un autre «truc»?

Merci

--MB

Répondre

6

Vous pouvez utiliser des voies de migration migrent avec la configuration suivante

validationMode=ALL 
validationErrorMode=CLEAN 

Pour chaque migration sql une somme de contrôle CRC32 est calculé lorsque le script SQL est exécuté. Le mécanisme de validation vérifie si les migrations sql dans le classpath ont toujours la même somme de contrôle que la migration sql déjà exécutée dans la base de données.

validationErrorMode = CLEAN est exclusivement conçu pour faciliter le développement. Même si nous recommandons fortement de ne pas modifier les scripts de migration une fois qu'ils ont été archivés dans SCM et exécutés, cela permet de gérer ce cas de manière fluide. La base de données sera nettoyée automatiquement, garantissant que la prochaine migration vous ramènera à l'état vérifié dans SCM. Cette configuration peut être utilisée par API, maven plugin ou command line.

+0

Merci, c'est parfait –

0

avec les nouvelles voies de migration, vous pouvez utiliser

flyway.setInitOnMigrate(true); 
flyway.setCleanOnValidationError(true); 
flyway.setValidateOnMigrate(true); 

Pour tout laisser tomber si la somme de contrôle des modifications de fichiers ou la table version est manquante.

+0

Pas besoin d'initOnMigrate dans ce cas. C'est pour les bases de données existantes seulement. –

+0

Oui, il est obligatoire si le schéma n'est pas vide. Cela forcera réellement à créer une table de version (de toute façon). Je suppose que c'est un peu risqué, mais c'est ce que vous voulez généralement utiliser pour les TI. – eckes

+0

Comme la question le dit, le db devrait être nettoyé et remigré après un changement. S'il est nettoyé, pas besoin d'appeler init. –

Questions connexes