Maison >Java >JavaBase >Instructions détaillées pour l'utilisation de Flyway

Instructions détaillées pour l'utilisation de Flyway

Guanhui
Guanhuiavant
2020-07-28 18:31:383819parcourir

Instructions détaillées pour l'utilisation de Flyway

1. Problèmes rencontrés dans la gestion de la base de données lors du développement :

De nos jours, le développement est généralement réalisé en équipes, il y aura donc des problèmes de synchronisation du projet. La synchronisation du code peut être gérée via les outils SVN, mais qu'en est-il de la synchronisation des bases de données ? Idéalement, lors du développement d'un nouveau projet, vous clarifierez d'abord l'activité, concevrez les tables de la base de données, puis confierez la base de données à un personnel spécialisé pour la maintenance, afin qu'il n'y ait pas de problèmes de synchronisation de la base de données. Mais quelle est la situation réelle ? Les exigences ne cessent de changer du début à la fin du projet. De nombreuses entreprises ne disposent pas de personnel dédié à la maintenance de la base de données. Ce serait bien si l'équipe communiquait en temps opportun et que tout le monde mettait à jour le code à chaque fois. temps. Base de données, si la communication n'est pas opportune, haha ​​​​(vous pouvez vous faire votre propre idée). . . De cette manière, le problème de la désynchronisation des bases de données est mis en évidence.

2. Une brève introduction à Flyway :

1. Concept :

Flyway est. Outil indépendant de gestion des versions de base de données pour l'application, la gestion et le suivi des modifications de la base de données. En termes simples, Flyway peut gérer les scripts SQL de différentes personnes, tout comme SVN gère les codes de différentes personnes, réalisant ainsi la synchronisation des bases de données.

2. Types de bases de données pris en charge :

Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (y compris Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (y compris Amazon RDS et Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE et Phoenix.

3. Convention de nommage pour les scripts SQL :

V + numéro de version (les chiffres dans le numéro de version sont séparés par "." ou "_") + double soulignement (utilisé pour séparer le numéro de version et description) + description du fichier + nom du suffixe, par exemple : V2017.9.30__Update.sql.

Remarque : Les numéros de version ne peuvent pas être les mêmes !

4. L'emplacement par défaut dans lequel Flyway lit les scripts SQL :

Le répertoire db/migration sous le dossier source du projet.

5. Commandes :

Il y a 6 commandes de base au total : migrer, nettoyer, info, valider, baseline, réparer.

3. Avantages de Flyway :

1. Prend non seulement en charge les scripts SQL, mais prend également en charge le code Java pour faire fonctionner directement la base de données (flyway). -core-x.x.x. jar);

2. A un plug-in Maven ;

3. Prend en charge la ligne de commande

4. vérifier et mettre à niveau automatiquement la fonctionnalité de la base de données.

4. Utilisation de l'outil de ligne de commande Flyway :

1. Décompressez et téléchargez la version flyway-commandlin et décompressez-la localement. Le diagramme est le suivant :

 

 2. Placez le script SQL dans le répertoire db/migration par défaut de Flyway. S'il est placé à d'autres emplacements, vous devez modifier flyway.locations dans la conf. /fichier flyway.conf.

3. Modifiez flyway.url, flyway.user, flyway.password dans le fichier conf/flyway.conf en fonction de votre propre situation.

4. Exécutez la commande migrate sur la ligne de commande.

5. Utiliser en conjonction avec les projets Maven :

1 Introduire les coordonnées de dépendance :

<!-- flyway -->
 <dependency>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-core</artifactId>
 <version>4.2.0</version>
 <dependency>

Créer dans le fichier src/main/resources. répertoire Le chemin pour stocker le fichier de version SQL est dataBase/sqlite (vous pouvez également écrire le chemin par défaut db/migration) et placez le fichier SQL ci-dessous.

3. Ajoutez la classe java flyway :

package com.xxxxxx.flyway;
 
 import javax.sql.DataSource;
 import org.flywaydb.core.Flyway;
 
 public class MigrationSqlite {
 
 private DataSource dataSource;
 
 public void setDataSource(DataSource dataSource) {
 this.dataSource = dataSource;
 }
 
 public void migrate() {
 //初始化flyway类
 Flyway flyway = new Flyway();
 //设置加载数据库的相关配置信息
 flyway.setDataSource(dataSource);
 //设置存放flyway metadata数据的表名,默认"schema_version",可不写
 flyway.setTable("SCHMA_VERSION");
 //设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写
 flyway.setLocations("dataBase/sqlite");
 //设置sql脚本文件的编码,默认"UTF-8",可不写
 flyway.setEncoding("UTF-8");
 
 flyway.migrate();
 }
 }

4 Instanciez la classe java à l'étape 3 au printemps :

<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate">
 <property name="dataSource" ref="dataSource"></property>
 </bean>

De. Dans la définition du bean ci-dessus, nous pouvons voir que nous avons injecté une source de données dans l'instance du bean flywayMigration. Toutes les opérations de Flyway seront effectuées sur cette source de données en même temps, nous avons spécifié Spring via l'attribut init-method lors de l'instanciation ; Ensuite, la méthode migrate du bean est activement exécutée et, au sein de cette méthode, Flyway met à jour la base de données. Jusqu'à présent, nous avons atteint le point où Spring instancie le contexte au démarrage de l'application, et lorsque Spring instancie le bean flywayMigration, Flyway met automatiquement à jour la base de données.

5. Gérer les conflits lorsque Flyway met à jour la base de données et que la logique du code exploite la base de données (je ne l'ai pas encore rencontré, je l'ai trouvé en ligne, conservez-le en cas d'urgence) :

Si Flyway est toujours là Avant de mettre à jour la base de données, une autre logique de l'application a commencé à utiliser la base de données pour d'autres opérations avant de terminer l'opération de mise à jour, ce qui entraînera la génération de nombreux bugs par l'application, voire son exécution inexistante. Pour résoudre ce problème, nous pouvons utiliser le principe de dépendance du bean de Spring pour que les beans d'opération de base de données clés dépendent du bean flywayMigration, de sorte qu'aucune autre opération liée à la base de données ne puisse être effectuée jusqu'à ce que flywayMigration soit instancié (l'opération de mise à jour de la base de données est terminée).

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>

De cette façon, la base de données sera automatiquement mise à jour à chaque démarrage du projet, vous n'aurez donc pas à vous soucier de la désynchronisation de la base de données.

Tutoriel recommandé : "Tutoriel Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer