Интеграция Flyway с Spring Boot не выполняет скрипты миграции во встроенной базе данных H2 - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь создать демонстрационную версию миграции на встроенной базе данных 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 /igration

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: База данных: jdbc: h2: mem: testdb (H2 1.4)

INFO 7284 --- [main] o.f.core.internal.command.DbValidate: Успешно подтверждена 1 миграция (время выполнения 00: 00.031 с)

INFO 7284 --- [main] o.f.c.i.s.JdbcTableSchemaHistory: создание схемы Таблица истории: "PUBLIC". "Flyway_schema_history"

INFO 7284 --- [main] o.f.core.internal.command.DbMigrate: Current версия схемы "ОБЩЕСТВЕННАЯ": << Пустая схема >>

INFO 7284 --- [main] o.f.core.internal.command.DbMigrate: Миграция схема "PUBLIC" до версии 2 - создание кораблекрушения

INFO 7284 --- [main] o.f.core.internal.command.DbMigrate: Успешно применена 1 миграция к схеме "PUBLIC" (время выполнения 00: 00.098s)

INFO 7284 --- [main] j.LocalContainerEntityManagerFactoryBean: Сборка контейнера JPA EntityManagerFactory для модуля сохранения 'По умолчанию'

INFO 7284 --- [main] o.hibernate.jpa.internal.util.LogHelper: HHH000204: Обработка PersistenceUnitInfo [имя: по умолчанию ...]

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

main] org.hibernate.cfg.Environment: HHH000206: hibernate.properties не найден

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

main] org.hibernate.dialect.Dialect: HHH000400: Использование диалект: org.hibernate.dialect.H2Dialect

main] j.LocalContainerEntityManagerFactoryBean: инициализированный JPA EntityManagerFactory для персистентного блока '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

database tables

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

Ответы [ 2 ]

0 голосов
/ 26 июля 2018

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

возможность создать таблицу с деталями Правильный: 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

0 голосов
/ 08 мая 2018

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

...