2010-03-21 7 views
0

Je travaille sur un code de migration de base de données en Java. Im également en utilisant un modèle d'usine afin que je puisse utiliser différents types de bases de données. Et chaque type de base de données im utilise implémente une interface commune.Modèle de migration de base de données pour Java?

Ce que je voudrais faire est d'avoir une vérification de migration qui est interne à la classe et exécute un code de mise à jour de schéma de base de données automatiquement. La mise à jour est assez simple (je vérifie la version du schéma dans une table et la compare à une constante de mon application pour décider si elle doit migrer ou non et entre quelles versions du schéma). Pour rendre cela automatique, je pensais que le test devrait vivre à l'intérieur (ou être appelé) du constructeur. OK, assez juste, c'est assez simple. Mon problème est que je ne veux pas que le test s'exécute à chaque fois que j'instancie un objet de base de données (il lance une requête donc le faire fonctionner sur toutes les constructions n'est pas efficace). Alors peut-être que cela devrait être une méthode statique de classe? Je suppose que ma question est, quel est un bon modèle de conception pour ce type de problème? Il devrait y avoir un moyen propre de s'assurer que le test de migration ne s'exécute qu'une fois OU est super-efficace.

Répondre

0

Je me sers de la iBatis SQL Mapper et vraiment comme ça. La prochaine version, iBatis 3.0, a schema migrations support. Ceci est encore en version bêta, mais je prévois de l'utiliser quand il se rapproche d'un candidat à la publication.

2

La voie de migration s'adapte parfaitement à vos besoins. Il prend en charge plusieurs bases de données, compare la version du schéma avec les migrations disponibles sur le chemin de classe et met à niveau la base de données en conséquence.

Vous pouvez l'intégrer dans votre application et l'exécuter une fois au démarrage comme décrit dans le Flyway docs.

Note: Flyway est également livré avec un plugin Maven et la possibilité de nettoyer un schéma existant au cas où vous feriez des erreurs dans le développement.

[Disclaimer: Je suis l'un des développeurs de voies de migration]

+0

J'ai fini par écrire mon propre code de migration. – Eno

+1

Cela semble intéressant - je vais devoir vérifier cela. – dustmachine

Questions connexes