web-dev-qa-db-fra.com

Comment gérer les migrations de bases de données dans Spring Boot avec Hibernate?

Mon arrière-plan de base de données provient du cadre Django (python). Dans Django, commencer avec les migrations de base de données était facile: migrations Django . Le Django framework fourni un outil pour créer les migrations en fonction de vos modèles, et aussi un outil pour appliquer les migrations sur votre base de données. Je pense que cette façon de faire a fonctionné à la fois en développement et en production. Vous n'avez pas eu à écrire des migrations par vous-même , le cadre les a créés pour vous.

Maintenant, j'ai commencé un projet avec Spring Boot et Hibernate. Je configure mon application pour utiliser la mise en veille prolongée avec JPA. Avec ces paramètres, je devrais maintenant savoir comment mon framework gère les migrations de base de données? Je veux dire si je modifie une colonne, que ce soit son type, ou même que je la supprime, alors comment migrer la base de données vers la modification? Je sais que Spring Boot détectera automatiquement les changements de colonne au démarrage et créera des colonnes qui n'existent pas en fonction des modèles (Entité). Je suppose que cela a quelque chose à voir avec la variable

spring.jpa.hibernate.ddl-auto

Mais comment gère-t-il les objets de base de données existants? Y ajoute-t-il aussi la colonne, et avec quelle valeur? La valeur par défaut que j'ai définie? Et si je change le type de colonne? Peut-il alors gérer le changement? Ces paramètres et la gestion automatisée de la base de données au démarrage ne sont probablement pas suffisants à long terme?

Ce que je veux savoir, c'est quelles sont les meilleures pratiques pour gérer les migrations de bases de données avec Spring Boot et la mise en veille prolongée? Je crois qu'il existe une norme comment la plupart des personnes avec cette combinaison gèrent les migrations? J'espère que c'est aussi simple qu'avec Django ... Je connais la voie de migration, mais je ne sais pas si j'en ai vraiment besoin, ou si elle est beaucoup utilisée avec ma combinaison (y compris Spring Boot et Hibernate).

14
Ville Miekk-oja

Liquibase ou Flyway sont les deux principales options de gestion des versions/gestion des migrations de bases de données. ddl-auto est rapide et sale, mais il ne prend pas, ni ne peut prendre en compte tout ce qui doit être manipulé. Il y a aussi la possibilité de conditions de course (deux instances essayant de mettre à jour le DDL en même temps).

Cette réponse donne plus de détails sur ddl-auto dans un environnement de production, et pourquoi vous ne devriez pas.

Hibernate: hbm2ddl.auto = mise à jour en production?

https://www.credera.com/blog/technology-insights/Java/liquibase-fed-inconsistent-schemas/ contient un peu plus d'informations sur le pourquoi/les concepts.

10
Darren Forsythe