Spring Boot - Flyway-Datenbank

Flyway ist eine Versionskontrollanwendung, mit der Sie Ihr Datenbankschema einfach und zuverlässig für alle Ihre Instanzen entwickeln können. Um mehr über Flyway zu erfahren, können Sie den Link www.flywaydb.org verwenden

Viele Softwareprojekte verwenden relationale Datenbanken. Dies erfordert die Behandlung von Datenbankmigrationen, die häufig auch als Schemamigrationen bezeichnet werden.

In diesem Kapitel erfahren Sie ausführlich, wie Sie die Flyway-Datenbank in Ihrer Spring Boot-Anwendung konfigurieren.

Flyway-Datenbank konfigurieren

Laden Sie zunächst das Spring Boot-Projekt von der Spring Initializer-Seite www.start.spring.io herunter und wählen Sie die folgenden Abhängigkeiten aus:

  • Spring Boot Starter Web
  • Flyway
  • MySQL
  • JDBC

Maven-Benutzer können die folgenden Abhängigkeiten in die Datei pom.xml einfügen.

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

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>

Gradle-Benutzer können die folgenden Abhängigkeiten in die Datei build.gradle einfügen.

compile('org.flywaydb:flyway-core')
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('org.springframework.boot:spring-boot-starter-web')
compile('mysql:mysql-connector-java')

In den Anwendungseigenschaften müssen die Datenbankeigenschaften zum Erstellen einer DataSource sowie die Flyway-Eigenschaften konfiguriert werden, die in den Anwendungseigenschaften konfiguriert werden müssen.

Fügen Sie für Benutzer von Eigenschaftendateien die folgenden Eigenschaften in die Datei application.properties ein.

spring.application.name = flywayapp  

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect=true
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.testOnBorrow = true
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.minEvictableIdleTimeMillis = 30000
spring.datasource.validationQuery = SELECT 1
spring.datasource.max-active = 15
spring.datasource.max-idle = 10
spring.datasource.max-wait = 8000

flyway.url = jdbc:mysql://localhost:3306/mysql
flyway.schemas = USERSERVICE
flyway.user = root
flyway.password = root

YAML-Benutzer können der Datei application.yml die folgenden Eigenschaften hinzufügen.

spring:
   application:
      name: flywayapp  
   datasource: 
      driverClassName: com.mysql.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect=true"
      password: "root"
      username: "root"
      testOnBorrow: true
      testWhileIdle: true
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 30000
      validationQuery: SELECT 1
      max-active: 15
      max-idle: 10
      max-wait: 8000
flyway:
   url: jdbc:mysql://localhost:3306/mysql
   schemas: USERSERVICE
   user: "root"
   password: "root"

Erstellen Sie nun eine SQL-Datei unter dem src/main/resources/db/migrationVerzeichnis. Nennen Sie die SQL-Datei "V1__Initial.sql".

CREATE TABLE USERS (ID INT AUTO_INCREMENT PRIMARY KEY, USERID VARCHAR(45));
INSERT INTO USERS (ID, USERID) VALUES (1, 'tutorialspoint.com');

Der Hauptcode der Spring Boot-Anwendungsklassendatei ist unten angegeben -

package com.tutorialspoint.flywayapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FlywayappApplication {
   public static void main(String[] args) {
      SpringApplication.run(FlywayappApplication.class, args);
   }
}

Die vollständige Build-Konfigurationsdatei finden Sie unten.

Maven – pom.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint</groupId>
   <artifactId>flywayapp</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>flywayapp</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.flywaydb</groupId>
         <artifactId>flyway-core</artifactId>
      </dependency>
      
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency>
      
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
   
</project>

Gradle – build.gradle

buildscript {
   ext {
      springBootVersion = '1.5.9.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
dependencies {
   compile('org.flywaydb:flyway-core')
   compile('org.springframework.boot:spring-boot-starter-jdbc')
   compile('org.springframework.boot:spring-boot-starter-web')
   compile('mysql:mysql-connector-java')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}

Sie können eine ausführbare JAR-Datei erstellen und die Spring Boot-Anwendung mit den unten angegebenen Maven- oder Gradle-Befehlen ausführen.

Für Maven können Sie den hier gezeigten Befehl verwenden -

mvn clean install

Nach "BUILD SUCCESS" finden Sie die JAR-Datei im Zielverzeichnis.

Für Gradle können Sie den hier gezeigten Befehl verwenden -

gradle clean build

Nach "BUILD SUCCESSFUL" finden Sie die JAR-Datei im Verzeichnis build / libs.

Führen Sie nun die JAR-Datei mit dem folgenden Befehl aus:

java –jar <JARFILE>

Jetzt wurde Tomcat auf dem Port 8080 gestartet und im Konsolenfenster können Sie die hier gezeigten Flyway-Datenbankprotokolle sehen.

Sie können jetzt zur Datenbank gehen und die ausgewählten Abfragen durchführen.