[JAVA] Ich habe Flyway mit Spring Boot ausprobiert

Einführung

Flyway ist als Java DB-Migration bekannt, aber ich habe sie nicht berührt, deshalb habe ich sie in den Neujahrsferien eingeführt. Es wurde geschätzt, dass die Arbeit 3 Stunden dauern würde, aber in Wirklichkeit dauerte es ungefähr 15 Minuten.

Identifizieren Sie, was Sie vorerst tun möchten

  1. Einführung von Flyway in Ihre eigene App (mit Gradle)
  2. DB-Migration für Anfänger mit Flyway
  3. Zusammenfassung (Qiita-Artikelerstellung)

Flyway eingeführt

Versuchen Sie, es in einer Webanwendung zu installieren, die unter SpringBoot + Gradle ausgeführt wird.

Die einzigen Schritte, die zur Installation erforderlich sind, sind folgende: Einfach!

  1. Füllen Sie die erforderlichen Elemente in build.gradle aus
  2. Platzieren Sie die SQL-Datei unter der CretateTable-Anweisung.
  3. Starten Sie Springboot (starten Sie mit IntelliJ IDEA)

Füllen Sie die erforderlichen Elemente in build.gradle aus.

build.gradle


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

plugins {
    id "org.flywaydb.flyway" version "4.1.2" // 2017,0315 spätestens
}

flyway {
    user = '' //DB-Benutzername
    url = ''//DB URL
}

Platzierung von SQL-Dateien

Stellen Sie als Nächstes die SQL-Dateien bereit, z. B. die folgende CretateTable-Anweisung.

・ Src / main / resources / db / migration /

Es gibt eine Namenskonvention für die Dateinamen der zu implementierenden Dateien. Es scheint auch, dass Datenbank erstellen usw. nicht geschrieben werden kann

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);

Starten Sie Springboot

Beim Starten einer App über IntelliJ IDEA wird die DB-Migration automatisch durchgeführt.

Irgendwie wird es bequem mit Flyway.

Während ich eine App erstelle, erstelle ich Mülldaten oder möchte die Datenbank zurücksetzen. Ich möchte jedoch saubere Daten behalten ... → Extrahieren Sie vorhandene Datensätze, die kein Problem haben, und fügen Sie sie nach dem Zurücksetzen der Datenbank automatisch ein → Bungal Lass es Flyway machen!

  1. Erhalten Sie vorhandene Datensätze mit MysqlWorkbench (kann als SQL-Datei in Form einer Einfügeanweisung in den Exportergebnissen abgerufen werden).
  2. Stellen Sie die SQL-Datei der insert-Anweisung unter src / main / resources / db / migration / bereit

Wenn Sie Springboot nach dem Löschen der Tabelle unter den oben genannten Bedingungen starten, werden die Tabellenerstellung und die Datensatzerstellung automatisiert. Wenn Sie die Version von SQL-Dateien ordnungsgemäß verwalten, werden die Hürden für den Aufbau einer Umgebung geringer!

Zusammenfassung

Ich konnte es reibungslos einführen, so dass ich Lust hatte, meinen Rücken zu drücken, was ich nur zögerlich eingeführt hatte. Da die Datenbank häufig zurückgesetzt wird, versuche ich, die Verwaltung der SQL-Datei nicht zu vernachlässigen. Darüber hinaus denke ich, dass es einige nützliche Funktionen gibt, die ich noch nicht gesehen habe, indem ich sie eingeführt habe. Deshalb werde ich sie hinzufügen, sobald sie entdeckt werden. Es scheint auch, dass es einen Artikel-Tag von Flyway gibt, also denke ich, dass Sie ihm folgen können.

Bonus

Beim Wechsel vom Datumstyp zum LocalDate-Typ in JPA Entity Es scheint, dass Sie die folgenden Techniken verwenden müssen

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);
	}
}

Der Trick ist, dass Jsr310JpaConverters.class das Ziel von Entity Scan ist.

Recommended Posts

Ich habe Flyway mit Spring Boot ausprobiert
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe es mit Spring versucht.
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
[Ich habe es versucht] Spring Tutorial
Ich habe Spring Batch ausprobiert
Mit Spring Boot herunterladen
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Ich wollte Spring Boot in einem Multiprojekt gradle
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Ich habe DI mit Ruby versucht
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Ich habe Spring State Machine ausprobiert
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Ich habe UPSERT mit PostgreSQL ausprobiert.
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Ich habe BIND mit Docker ausprobiert
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Datenbankverknüpfung mit doma2 (Spring Boot)
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe eine morphologische Analyse mit MeCab versucht
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, UDP mit Java zu kommunizieren
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Frühling mit Kotorin ―― 9. Datenbankmigration ―― Flyway
Google Cloud Platform mit Spring Boot 2.0.0
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe versucht, Slim mit Scaffold anzupassen
Die Nachrichtenkooperation begann mit Spring Boot
Ich habe das Spring Boot-Einführungshandbuch [Erstellen eines RESTful-Webdiensts] ausprobiert.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.