[JAVA] J'ai essayé Flyway avec Spring Boot

introduction

Flyway est connu comme une migration Java DB, mais je n'y ai pas touché, alors je l'ai présenté pendant les vacances du Nouvel An. On a estimé qu'il faudrait 3 heures pour travailler, mais en réalité, cela prend environ 15 minutes.

Identifiez ce que vous voulez faire pour le moment

  1. Présentation de Flyway à votre propre application (en utilisant Gradle)
  2. Migration de base de données débutant à l'aide de Flyway
  3. Résumé (création d'article Qiita)

Flyway introduit

Essayez de l'installer dans une application Web exécutée sur SpringBoot + Gradle.

Les seules étapes nécessaires à son installation sont les suivantes: Facile!

  1. Renseignez les éléments requis dans build.gradle
  2. Placez le fichier SQL sous l'instruction CretateTable.
  3. Démarrez Springboot (à partir d'IntelliJ IDEA)

Renseignez les éléments requis dans build.gradle.

build.gradle


ext {
	// Flyway
	flywayVersion = "4.1.2" // 2017,0315 dernier
}
dependencies {
	// Flyway
	compile ("org.flywaydb:flyway-core:$flywayVersion")
}

plugins {
    id "org.flywaydb.flyway" version "4.1.2" // 2017,0315 dernier
}

flyway {
    user = '' //Nom d'utilisateur DB
    url = ''//URL de la base de données
}

Placement des fichiers SQL

Ensuite, déployez les fichiers SQL tels que l'instruction CretateTable ci-dessous.

・ Src / main / resources / db / migration /

Il existe une convention de dénomination pour les noms de fichiers des fichiers à déployer. De plus, il semble que Create Database etc. ne puisse pas être écrit

sql:V1.0__Initial_Setup.sql


CREATE TABLE IF NOT EXISTS ANSWER_INFO_TBL (
  NO BIGINT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  TYPE TINYINT(1) NOT NULL,
  ANSWERKEY VARCHAR(81) UNIQUE NOT NULL,
  KEYHASH VARCHAR(64) UNIQUE NOT NULL ,
  CREATE_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE IF NOT EXISTS SCORE_INFO_TBL (
  NO BIGINT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  SCORE MEDIUMINT(7) UNSIGNED DEFAULT 0 NOT NULL,
  NAME VARCHAR(64) DEFAULT '' NOT NULL,
  MEMO VARCHAR(64) DEFAULT '' NOT NULL,
  UPDATE_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (NO)
          REFERENCES ANSWER_INFO_TBL(NO)
          ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

ALTER TABLE ANSWER_INFO_TBL ADD INDEX INDEX_ANSWERKEY(ANSWERKEY ASC);
ALTER TABLE ANSWER_INFO_TBL ADD INDEX INDEX_KEYHASH(KEYHASH ASC);

Démarrez Springboot

Lors du lancement d'une application depuis IntelliJ IDEA, la migration de base de données est effectuée automatiquement.

D'une manière ou d'une autre, cela devient pratique d'utiliser Flyway.

Lors de la création d'une application, je crée des données inutiles ou je souhaite réinitialiser la base de données. Cependant, je souhaite conserver des données propres ... → Extraire les enregistrements existants qui n'ont pas de problème et les insérer automatiquement après la réinitialisation de la base de données →→ Laissez Flyway le faire!

  1. Obtenez des enregistrements existants avec MysqlWorkbench (peut être obtenu sous forme de fichier sql sous la forme d'une instruction d'insertion dans les résultats d'exportation)
  2. Déployez le fichier sql de l'instruction insert sous src / main / resources / db / migration /

Si vous démarrez Springboot dans les conditions ci-dessus après avoir supprimé la table, cela automatisera la création de la table et la création de l'enregistrement. Si vous gérez correctement la version des fichiers SQL, les obstacles à la création d'un environnement disparaîtront!

Résumé

J'ai pu l'introduire en douceur, j'ai donc envie de me repousser, ce que j'avais hésité à présenter. Étant donné que la base de données est réinitialisée fréquemment, j'essaie de ne pas négliger la gestion du fichier sql. De plus, je pense qu'il y a quelques fonctions utiles que je n'ai pas encore vues juste en les introduisant, donc je les ajouterai dès qu'elles seront découvertes. De plus, il semble qu'il y ait une balise article de Flyway, donc je pense que vous pouvez la suivre.

prime

Lors du passage du type Date au type LocalDate dans l'entité JPA Il semble que vous deviez utiliser les techniques suivantes

WebApp.java


@SpringBootApplication
@Import(Domain.class)
@EntityScan(basePackageClasses = {WebApp.class, Jsr310JpaConverters.class})
@EnableScheduling
public class WebApp extends SpringBootServletInitializer {
	public static void main(String[] args) {
		new SpringApplicationBuilder(WebApp.class)
						.profiles("dev")
						.run(args);
	}
}

L'astuce est que Jsr310JpaConverters.class est la cible de Entity Scan.

Recommended Posts

J'ai essayé Flyway avec Spring Boot
J'ai essayé GraphQL avec Spring Boot
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'ai essayé Spring.
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
[J'ai essayé] Tutoriel de printemps
J'ai essayé Spring Batch
Télécharger avec Spring Boot
Essayez d'automatiser la migration avec Spring Boot Flyway
Je voulais classer la botte à ressort dans un multi-projet
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
J'ai essayé DI avec Ruby
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
J'ai essayé la machine Spring State
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
J'ai essayé UPSERT avec PostgreSQL.
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
J'ai essayé BIND avec Docker
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé de démarrer avec Spring Data JPA
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
Liaison de base de données avec doma2 (Spring boot)
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé l'analyse morphologique avec MeCab
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
J'ai essayé d'interagir avec Java
J'ai essayé la communication UDP avec Java
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Spring with Kotorin ―― 9. Migration de base de données ―― Flyway
Google Cloud Platform avec Spring Boot 2.0.0
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé de personnaliser Slim avec Scaffold
La coopération des messages a commencé avec Spring Boot
J'ai essayé le guide d'introduction de Spring Boot [Création d'un service Web RESTful]
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 1/3 (paramètres Jasper Reports)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)