Si vous n'avez pas lu le contenu ci-dessus, vous pouvez le lire si vous êtes intéressé. Dans l'article ci-dessus à l'aide de JDBCTemplate, le tableau utilisateur est principalement ajouté, supprimé, modifié et vérifié via JDBCTemplate fourni par Spring. Lors de l'implémentation de cet exemple, nous avons créé la table utilisateur dans MySQL à l'avance. Nous utilisons souvent le processus de création de tables lors du développement du système, mais il y a toujours eu un problème. Étant donné que la version du programme d'un système est bien contrôlée via GIT, et que la structure de la base de données ne le fait pas. Même si nous versionons les instructions via GIT, comment gérer la version dans les bases de données de chaque environnement? Ensuite, nous apprendrons à utiliser le voleur de volonté pour gérer les versions de base de données dans Spring Boot via cet article.
Introduction à la voie de migration
Flyway est un simple contrôleur de version de base de données open source (la convention est supérieure à la configuration), qui fournit principalement des commandes migrates, propres, info, valider, de base, réparation et autres commandes. Il prend en charge les méthodes SQL (PL / SQL, T-SQL) et Java, prend en charge les clients de la ligne de commande, etc., et fournit également une série de support plug-in (Maven, Gradle, SBT, ANT, etc.).
Site officiel: https://flywaydb.org/
Cet article ne présente pas trop les fonctions de Flyway. Les lecteurs peuvent obtenir plus d'informations en lisant des documents officiels ou en utilisant des moteurs de recherche. Ci-dessous, nous parlerons de l'application dans l'application Spring Boot en détail, comment utiliser la voile de volonté pour créer des bases de données et vérifier la structure de manière incohérente.
Essayez-le
Ci-dessous, nous pouvons terminer le traitement en utilisant l'exemple de l'article à l'aide de JDBCTemplate. Les lecteurs peuvent également utiliser n'importe quel projet lié à l'accès aux données à l'expérience avec le contenu suivant:
La première étape consiste à ajouter la dépendance de Flyway dans pom.xml:
<dependency> <proupId> org.flywaydb </rompuprid> <letifactive> Flyway-core </ artifactid> <version> 5.0.3 </-version> </Dependance>
La deuxième étape consiste à créer un script SQL versé selon les spécifications de Flyway.
Créer un répertoire DB dans le cadre du répertoire SRC / Main / Resources du projet
Créer un script SQL versionné v1__base_version.sql dans le répertoire DB
Table de dépose si existe l'utilisateur; créer la table `User` (` id` bigint (20) pas null auto_increment commentaire `` clé primaire '', `name` varchar (20) non nul comment` `nom '',` `Â 'int (5) commentaire null' par défaut 'Age', clé primaire (` id`)) moteur = innodb Défaufflement CHARDET = UTF8MB4;
La troisième étape consiste à configurer l'emplacement du script SQL à charger dans le fichier application.properties. Le résultat créé dans la deuxième étape est le suivant:
Flyway.locations = classpath: / db
La quatrième étape consiste à exécuter des tests d'application de test unitaire. Pour le moment, nous pouvons voir les informations suivantes dans le journal:
Info 82441 --- [Main] OfCore.internal.util.versionPrinter: Flyway Community Edition 5.0.3 par BoxFuseinfo 82441 --- [Main] OfCinternal.Database.DatabaseFactory: Database: JDBC: MySQL: // lochost: 3306 / test (Mysql 5.7) Info 8241 - [MAL] ofcore.internal.command.dbvalidate: a validé avec succès 1 migration (temps d'exécution 00: 00.022S) Info 82441 --- [Main] OfCore.internal.Command.DBValidate: Info avec succès 1 migration (Temps d'exécution 00: 00.022S) Info 82441 --- [Main] ofcisjdbcCoughsCHe Création du schéma Tableau d'historique: `test`.`flyway_schema_history`info 82441 --- [main] ofcore.internal.command.dbmigrate: version actuelle du schéma` test`: << schéma vide >> info 82441 --- [main] ofCore.internal.command.dbmigrate 82441 --- [Main] ofCore.internal.sqlscript.sqlscript: DB: Tableau inconnu 'Test.User' (État SQL: 42S02 - Code d'erreur: 1051) Info 82441 --- [Main] OfCore.internal.command. 00: 00.128S)
Flyway surveille qu'il est nécessaire d'exécuter un script de version pour initialiser la base de données, il exécute donc le script v1__base_version.sql, créant ainsi la table utilisateur, qui permet une série de tests unitaires (opérations CRUD sur la table utilisateur) à passer.
Dans la cinquième étape, nous pouvons continuer à exécuter le test unitaire, et pour le moment, nous constaterons que la sortie du journal est différente: avant:
Info 83150 --- [Main] OfCore.internal.util.versionPrinter: Flyway Community Edition 5.0.3 par BoxFuseinfo 83150 --- [Main] OfCinternal.Database.DatabaseFactory: Database: JDBC: MySQL: // local: 3306 / test (MySQL 5.7) Infos 83150 - [Main] OFCORE.Internal.Command.DBValidate: Info 83150 --- [Main] OfCore.Internal.Command.Command. OFCORE.Internal.Command.DBMigrate: Version actuelle du schéma `Test ': 1Info 83150 --- [Main] OfCore.internal.Command.DBMigrate: Schema` Test` est à jour. Aucune migration nécessaire.
Étant donné que le script d'initialisation a été exécuté dans la quatrième étape, cette fois, l'exécution n'a pas exécuté le script v1__base_version.sql pour reconstruire la table utilisateur.
Dans la sixième étape, nous pouvons essayer de modifier la longueur du champ Nom dans le script v1__base_version.sql, puis exécuter le test unitaire, nous pouvons obtenir l'erreur suivante:
Erreur 83791 --- [Main] Osboot.SpringApplication: Application StartUp Failsorg.SpringFramework.Beans.factory.BeanCreationException: Erreur Création de bean avec le nom 'FlywayInitializer' défini dans la ressource de chemin de classe [Org / Springframework échoué; L'exception imbriquée est org.flywaydb.core.api.flywayException: validate a échoué: la migration Calmatch pour la migration version 1-> appliquée à la base de données: 466264992-> résolu localement: -270269434
En raison des modifications du script d'initialisation, la vérification de la voie de la voie de la voie a échoué. On pense que le script actuel v1__base_version.sql est différent du dernier contenu exécuté, provoquant une erreur et terminant le programme pour éviter de causer des dommages de structure de données plus graves.
Résumer
Jusqu'à présent, le contenu de cet article a pris fin. En raison de la durée du billet de blog, je n'ai pas dit grand-chose sur l'utilisation de la voie de chute plus en détail. Cet article est principalement utilisé comme tremplin pour aider et guider les individus ou les équipes qui utilisent Spring Boot pour faire mieux dans le contrôle de la version de la base de données. Quant aux applications plus approfondies, veuillez lire les documents officiels pour référence et étude.
Code de cet article: GitHub: https://github.com/dyc87112/springboot-learning/
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.