[JAVA] Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren

Fahren Sie mit dem vorherigen Artikel fort [So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ], und legen Sie die Einstellungen so fest, dass beim Start der Anwendung automatisch Tabellen in der Datenbank erstellt werden. Machen.

Im vorherigen Artikel habe ich sogar eine Datenbank mit dem Namen ** todo ** in der Datenbank erstellt.

Überprüfen Sie build.gradle

Überprüfen Sie, ob es in Plugins ** Flyway ** und in Abhängigkeiten ** Flyway-Core ** gibt.

build.gradle



plugins {
    id 'java'
    id 'org.springframework.boot' version '2.3.1.BUILD-SNAPSHOT'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'com.avast.gradle.docker-compose' version '0.12.1' 
    id 'org.flywaydb.flyway' version '6.4.3' //Hier
}

// ...Abkürzung

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.flywaydb:flyway-core' //Hier
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

Erstellen Sie application.yml

https://github.com/miyabayt/spring-boot-doma2-sample Die Einstellungen des Repositorys werden unverändert verwendet. Ich habe die Teile entfernt, die ich jetzt nicht brauche, wie z. B. Doma.

applocation.yml


#Definieren Sie allgemeine Einstellungen
spring:
  profiles:
    #Geben Sie den Standard explizit an
    default: local
    active: local
  main:
    #Temporäre Unterstützung für das Überschreiben von Bean von DataValueProcessor
    allow-bean-definition-overriding: true
  messages:
    #Legen Sie den Pfad der Nachrichtendefinitionsdatei fest
    basename: messages,ValidationMessages,PropertyNames
    cache-duration: -1
    encoding: UTF-8
  jackson:
    #Machen Sie den JSON-Schlüssel zu einer durch Unterstriche getrennten Zeichenfolge
    property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
  thymeleaf:
    #Der HTML5-Modus ist veraltet. Wechseln Sie daher in den HTML-Modus
    mode: HTML
  resources:
    #Statischen Inhalt zwischenspeichern
    cache:
      period: 604800
    chain:
      #Verwenden Sie alle Ressourcen, die GZiped sind
      compressed: true
      strategy:
        content:
          #Versionierung durch MD5-Hashwert des Inhalts
          enabled: true
          paths: /**
  servlet:
    multipart:
      #Legen Sie die Upload-Größenbeschränkung fest
      max-file-size: 5MB
      max-request-size: 5MB
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    hikari:
      autoCommit: false
      connectionTimeout: 30000
      idleTimeout: 30000
      maxLifetime: 1800000
      connectionTestQuery: SELECT 1
      minimumIdle: 10
      maximumPoolSize: 30
jmx:
  enabled: false
server:
  port: 18082 #Geändert von 18081
  compression:
    enabled: true
  servlet:
    session:
      timeout: 7200
      #Geben Sie die Sitzungs-ID nicht in der URL aus
      tracking-modes: cookie
    contextPath: /
logging:
  pattern:
    #Geben Sie den in MDC eingestellten Wert aus
    level: "[%X{FUNCTION_NAME}:%X{X-Track-Id}:%X{LOGIN_USER_ID}] %5p"

#Anwendungseinstellungen
application:
  fileUploadLocation: build/todo #Wechsel von Probe

Erstellen Sie application-local.yml

Nehmen Sie Einstellungen für lokal vor. Fügen Sie hier die Informationen der Docker-Datenbank hinzu, die im vorherigen Artikel erstellt wurden. (Dies ist der Teil von ** # change **)

url jdbc:mysql://127.0.0.1:[port]/[DB_name]?useSSL=false&characterEncoding=UTF-8 ** [Port] ** ist die in den Ports in docker-compose.yml angegebene Nummer ** [DB_name] ** ist der Tabellenname (MYSQL_DATABASE), der in der Umgebung von docker-compose.yml angegeben ist

** Benutzername und Passwort ** Benutzername (MYSQL_ROOT_USER) und Passwort (MYSQL_ROOT_PASSWORD), die in der Umgebung von docker-compose.yml angegeben sind

application-local.yml


#Einstellungen für lokal
spring:
  profiles: local
  messages:
    cache-duration: -1
  datasource:
    platform: mysql
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:33068/todo?useSSL=false&characterEncoding=UTF-8 #Veränderung
    username: root #Veränderung
    password: passw0rd #Veränderung
  resources:
    #Den Cache ungültig machen
    cache:
      period: 0
  flyway:
    enable: true
    baseline-on-migrate: true
    placeholder-replacement: false
logging:
  level:
    org.springframework: INFO
    org.springframework.jdbc: INFO
    org.thymeleaf: INFO
    com.example: DEBUG # com.Wechsel von Probe

####
#Anwendungseinstellungen
application:
  fileUploadLocation: build/todo #Wechsel von Probe
  cors:
    allowedHeaders: "Origin, X-Requested-With, Content-Type, Accept, X-XSRF-TOKEN"
    allowedMethods: "POST, GET, PUT, OPTIONS, DELETE"
    allowedOrigins: "*" #Geben Sie den Domänennamen an, der CORS zulässt

Erstellen Sie eine SQL-Datei

Flyway-Core-Dokumentation Wie in der Dokumentation angegeben, haben SQL-Dateien Namenskonventionen. Dieses Mal habe ich die folgenden zwei SQL-Dateien erstellt.

Der Standardspeicherort ist "Ressource> Datenbank> Migration".

R__0_create_tables.sql


CREATE TABLE IF NOT EXISTS users(
  user_id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Benutzeridentifikation'
  , first_name VARCHAR(40) NOT NULL COMMENT 'Name'
  , last_name VARCHAR(40) NOT NULL COMMENT 'Familienname, Nachname'
  , email VARCHAR(100) UNIQUE DEFAULT NULL COMMENT 'Mail Adresse'
  , password VARCHAR(100) DEFAULT NULL COMMENT 'Passwort'
  , role VARCHAR(100) DEFAULT NULL COMMENT 'Behörde'
  , created_at DATETIME NOT NULL COMMENT 'Eingetragenes Datum'
  , updated_by VARCHAR(50) DEFAULT NULL COMMENT 'Wechsler'
  , updated_at DATETIME DEFAULT NULL COMMENT 'Datum und Uhrzeit aktualisieren'
  , deleted_by VARCHAR(50) DEFAULT NULL COMMENT 'Löschen'
  , deleted_at DATETIME DEFAULT NULL COMMENT 'Datum und Uhrzeit löschen'
  , version INT(11) unsigned NOT NULL DEFAULT 1 COMMENT 'Revisionsnummer'
  , PRIMARY KEY (user_id)
  , KEY idx_users (email, deleted_at)
) COMMENT='Nutzer';

R__1_insert_datas.sql


INSERT INTO `users` VALUES
    (1,'Yamada','Hanako','[email protected]','passw0rd',NULL,NOW(),NULL,NULL,NULL,NULL,1),
    (2,'Suzuki','Taro','[email protected]','passw0rd',NULL,NOW(),NULL,NULL,NULL,NULL,1);

Das Passwort ist hier nicht verschlüsselt, so wie es ist. Ich werde es im nächsten Artikel tun.

Anwendungsausführung

Öffnen Sie ein IntelliJ-Terminal und führen Sie ./gradlew bootRun aus.

$ ./gradlew bootRun

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.3.1.BUILD-SNAPSHOT)


...Abkürzung

2020-06-13 22:15:41.439 [::]  INFO 78329 --- [io-18082-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 7 ms
<=========----> 75% EXECUTING [10m 10s]
> :bootRun

Wenn es im Terminal so aussieht, ist es erfolgreich. Die Zahl nach ** EXECUTING ** ist die Startzeit, daher funktioniert es weiter.

Wenn die folgende Anzeige angezeigt wird, liegt ein Fehler vor. Überprüfen Sie daher den Fehler.

BUILD SUCCESSFUL in 5s
3 actionable tasks: 2 executed, 1 up-to-date

Überprüfen Sie in der Tabelle

[Vorheriger Artikel](https://qiita.com/megumi_622/items/341cfbb684256e7c4dbc#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE % E7% A2% BA% E8% AA% 8D) Geben Sie MySQL in den Container ein und überprüfen Sie die Tabelle.

Wenn der Benutzer wie unten gezeigt registriert ist, ist er erfolgreich.

mysql> select * from users;
+---------+------------+-----------+---------------+-----------+------+----------------------+------------+------------+------------+------------+---------+
| user_id | first_name | last_name | email          | password | role | created_at           | updated_by | updated_at | deleted_by | deleted_at | version |
+---------+------------+-----------+---------------+-----------+------+----------------------+------------+------------+------------+------------+---------+
|       1 |Yamada|Hanako| [email protected] | passw0rd | NULL | 2020-06-13 22:05:03 | NULL       | NULL       | NULL       | NULL       |       1 |
|       2 |Suzuki|Taro| [email protected] | passw0rd | NULL | 2020-06-13 22:05:03 | NULL       | NULL       | NULL       | NULL       |       1 |
+---------+-----------+-------------+----------------+----------+------+---------------------+-----------+------------+-------------+------------+---------+
2 rows in set (0.01 sec)

Nächstes Mal erstellen wir einen ** Anmeldebildschirm **.

Recommended Posts

Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Versuchen Sie Spring Boot von 0 bis 100.
Frühling mit Kotorin ―― 9. Datenbankmigration ―― Flyway
Ich habe Flyway mit Spring Boot ausprobiert
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Ich wollte Spring Boot in einem Multiprojekt gradle
Versuchen Sie, Hallo Welt mit Frühling + Gradle anzuzeigen
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Spring Boot herunterladen
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
Booten nach Umgebung mit Spring Boot of Maven
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Versuchen Sie, mit Keycloak mit Spring Security SAML (Spring 5) zu arbeiten.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Einführung in Spring Boot ~ ~ DI ~
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
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Einführung in Spring Boot Teil 1
Versuchen Sie es mit Spring Boot Security
Versuchen Sie Spring Boot auf dem Mac
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Geben Sie das integrierte Tomcat-Zugriffsprotokoll mit Spring Boot an die Standardausgabe aus
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Fluss bis zur Ausgabe von Tabellendaten, die mit Spring Boot angezeigt werden sollen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
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
Datenbankverknüpfung mit doma2 (Spring Boot)
So stellen Sie Spring Boot + PostgreSQL ein
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Verwendung von ModelMapper (Spring Boot)