Интеграция Flyway с весенней загрузкой не выполняет сценарии миграции во встроенной базе данных H2

Я пытаюсь сделать демонстрацию миграции во встроенной базе данных H2 в приложении Spring Boot с помощью Flyway.

application.properties

logging.level.org.org.springframework=DEBUG
server.port=8181
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.flyway.baseline-on-migrate=true
spring.jpa.hibernate.ddl-auto=none

сценарий миграции (V2__create_shipwreck.sql) в папке db / migration

CREATE TABLE SHIPWRECK(ID INT AUTO_INCREMENT,
    NAME VARCHAR(255),
    DESCRIPTION VARCHAR(2000),
    CONDITION VARCHAR(255),
    DEPTH INT,
    LATITUDE DOUBLE,
    LANGITUDE DOUBLE,
    YEARS_DISCOERED INT);

журнал консоли

INFO 7284 --- [main] o.f.c.internal.database.DatabaseFactory: Database: jdbc:h2:mem:testdb (H2 1.4)

INFO 7284 --- [main] o.f.core.internal.command.DbValidate: Successfully validated 1 migration (execution time 00:00.031s)

INFO 7284 --- [main] o.f.c.i.s.JdbcTableSchemaHistory: Creating Schema History table: "PUBLIC"."flyway_schema_history"

INFO 7284 --- [main] o.f.core.internal.command.DbMigrate: Current version of schema "PUBLIC": << Empty Schema >>

INFO 7284 --- [main] o.f.core.internal.command.DbMigrate: Migrating schema "PUBLIC" to version 2 - create shipwreck

INFO 7284 --- [main] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.098s)

INFO 7284 --- [main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'

INFO 7284 --- [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default...]

main] org.hibernate.Version : HHH000412: Hibernate Core {5.2.14.Final}

main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found

main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}

main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect

main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'

pom.xml

<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.boot</groupId>
    <artifactId>das-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>das-boot</name>
    <url>http://maven.apache.org</url>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>5.0.7</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Пользовательский интерфейс таблиц базы данных H2

Интеграция Flyway с весенней загрузкой не выполняет сценарии миграции во встроенной базе данных H2

После запуска приложения Spring Boot таблица не была создана, так в чем проблема?

Пожалуйста, включите pom.xml

Luay Abdulraheem 08.05.2018 05:50

@LuayAbdulraheem Мне добавлен pom.xml

Elsayed 08.05.2018 09:43

В ваших журналах указано обратное: «Перенос схемы« PUBLIC »в версию 2 - создание кораблекрушения» и «Успешно применена 1 миграция к схеме« PUBLIC »(время выполнения 00: 00,098 с)». Как вы проверяли, не создана ли таблица в скрипте миграции?

N. Labrahmi 08.05.2018 13:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
3
7 571
2

Ответы 2

Исходя из вашего описания (Flyway выполняется правильно, но после этого изменений схемы не наблюдается) это звучит так, как будто Spring Boot не сохраняет изменения H2. Вы можете попробовать добавить spring.jpa.hibernate.ddl-auto=none к вашему application.properties, чтобы конфигурация JPA не переопределяла изменения вашей схемы после миграции Flyway, согласно этот вопрос.

Спасибо за ответ, я сделал то же самое, но все осталось прежним.

Elsayed 09.05.2018 09:54

У меня была такая же проблема, она была решена после внесения изменений в application.properties как datasource.url на файл вместо мем

возможность составить таблицу с деталями Верный: spring.datasource.url=jdbc:h2:file:~/dasboot

application.properties

logging.level.org.org.springframework=DEBUG
server.port=8080

spring.h2.console.enabled=true
spring.h2.console.path=/h2

spring.datasource.url=jdbc:h2:file:~/dasboot
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

spring.flyway.baseline-on-migrate=true
spring.jpa.hibernate.ddl-auto=none

POM.xml

<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.boot</groupId>
    <artifactId>das-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

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

    <name>das-boot</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

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

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

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>


    </dependencies>

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

</project>

Таблица кораблекрушения была создана и сохранена в h2 db

Другие вопросы по теме