From 681d34b775a8caab152111f0567807f52b54d0cf Mon Sep 17 00:00:00 2001 From: Petromir Dzhunev Date: Fri, 24 Jan 2020 22:35:17 +0200 Subject: [PATCH] REFLECT-2 Integrating H2 with Flyway --- .../data-migration/flyway/build.gradle | 34 ++++++++++++--- .../data-migration/flyway/docker-compose.yml | 18 -------- .../gradle/wrapper/gradle-wrapper.properties | 5 ++- .../flyway/src/main/resources/application.yml | 9 ---- .../main/resources/db/migration/V1__init.sql | 7 ++++ .../flyway/FlywayApplicationTests.java | 13 ------ .../reflectoring/flyway/FlywayWithH2Test.java | 41 +++++++++++++++++++ 7 files changed, 79 insertions(+), 48 deletions(-) delete mode 100644 spring-boot/data-migration/flyway/docker-compose.yml delete mode 100644 spring-boot/data-migration/flyway/src/main/resources/application.yml create mode 100644 spring-boot/data-migration/flyway/src/main/resources/db/migration/V1__init.sql delete mode 100644 spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayApplicationTests.java create mode 100644 spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayWithH2Test.java diff --git a/spring-boot/data-migration/flyway/build.gradle b/spring-boot/data-migration/flyway/build.gradle index 0a414ca..e9cda6b 100644 --- a/spring-boot/data-migration/flyway/build.gradle +++ b/spring-boot/data-migration/flyway/build.gradle @@ -1,7 +1,8 @@ plugins { - id 'org.springframework.boot' version '2.2.2.RELEASE' + id 'org.springframework.boot' version '2.2.3.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id 'java' + id "org.flywaydb.flyway" version "6.2.0" } group = 'io.reflectoring' @@ -13,13 +14,34 @@ repositories { } dependencies { - implementation 'org.springframework.boot:spring-boot-starter' - implementation 'org.flywaydb:flyway-core' - testImplementation('org.springframework.boot:spring-boot-starter-test') { - exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' - } + + compileOnly 'org.projectlombok:lombok' + + // Spring + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-jdbc' + + // Database + implementation 'org.flywaydb:flyway-core' + runtimeOnly 'com.h2database:h2:1.4.199' + + // Add jaxb since it's no longer available in Java 11 + runtime 'javax.xml.bind:jaxb-api:2.3.1' + + // Test + testCompile 'org.assertj:assertj-core' + testImplementation('org.springframework.boot:spring-boot-starter-test') { + exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' + } + testImplementation('org.junit.jupiter:junit-jupiter:5.5.1') } test { useJUnitPlatform() } + +flyway { + url = 'jdbc:h2:mem:' + user = 'sa' + password = '' +} \ No newline at end of file diff --git a/spring-boot/data-migration/flyway/docker-compose.yml b/spring-boot/data-migration/flyway/docker-compose.yml deleted file mode 100644 index 4bfd048..0000000 --- a/spring-boot/data-migration/flyway/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '2.1' - -services: - db: - image: postgres:12.0-alpine - container_name: local-postgres - environment: - POSTGRES_PASSWORD: 'R6&)4#pg{G' - POSTGRES_USER: raika - expose: - - 5432 - ports: - - 5432:5432 - healthcheck: - test: ["CMD-SHELL", "pg_isready -U raika -d raika"] - interval: 5s - timeout: 31s - retries: 6 \ No newline at end of file diff --git a/spring-boot/data-migration/flyway/gradle/wrapper/gradle-wrapper.properties b/spring-boot/data-migration/flyway/gradle/wrapper/gradle-wrapper.properties index 9492014..e5348d2 100644 --- a/spring-boot/data-migration/flyway/gradle/wrapper/gradle-wrapper.properties +++ b/spring-boot/data-migration/flyway/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Jan 21 16:55:51 EET 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/spring-boot/data-migration/flyway/src/main/resources/application.yml b/spring-boot/data-migration/flyway/src/main/resources/application.yml deleted file mode 100644 index e8d4caf..0000000 --- a/spring-boot/data-migration/flyway/src/main/resources/application.yml +++ /dev/null @@ -1,9 +0,0 @@ -spring: - datasource: - url: jdbc:postgresql://db:5432/test - - flyway: - url: "${spring.datasource.url}" - user: test - password: test - schemas: public \ No newline at end of file diff --git a/spring-boot/data-migration/flyway/src/main/resources/db/migration/V1__init.sql b/spring-boot/data-migration/flyway/src/main/resources/db/migration/V1__init.sql new file mode 100644 index 0000000..66db831 --- /dev/null +++ b/spring-boot/data-migration/flyway/src/main/resources/db/migration/V1__init.sql @@ -0,0 +1,7 @@ +-- Init script + +-- DDL +CREATE TABLE auth_user( + id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(255) NOT NULL unique +); \ No newline at end of file diff --git a/spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayApplicationTests.java b/spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayApplicationTests.java deleted file mode 100644 index b81bce6..0000000 --- a/spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.reflectoring.flyway; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class FlywayApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayWithH2Test.java b/spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayWithH2Test.java new file mode 100644 index 0000000..d556cbe --- /dev/null +++ b/spring-boot/data-migration/flyway/src/test/java/io/reflectoring/flyway/FlywayWithH2Test.java @@ -0,0 +1,41 @@ +package io.reflectoring.flyway; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.jdbc.core.JdbcTemplate; + +@DataJpaTest +class FlywayWithH2Test { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Test + void databaseHasBeenInitialized() { + + jdbcTemplate.execute("insert into auth_user values(1, 'reflectoring')"); + + final List authUsers = jdbcTemplate + .query("SELECT id, username FROM auth_user", (rs, rowNum) -> new AuthUser( + rs.getString("id"), + rs.getString("username") + )); + + Assertions.assertThat(authUsers).isNotEmpty(); + } + + private static class AuthUser { + public String id; + public String username; + + public AuthUser(final String id, final String username) { + + this.id = id; + this.username = username; + } + } +} \ No newline at end of file