与Spring Boot的Flyway集成无法在嵌入式H2数据库上执行迁移脚本

Els*_*yed 6 java jpa h2 flyway spring-boot

我正在尝试使用Flyway在Spring Boot应用程序中的嵌入式H2数据库上进行迁移演示。

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
Run Code Online (Sandbox Code Playgroud)

db / migration下的migration-script(V2__create_shipwreck.sql)

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);
Run Code Online (Sandbox Code Playgroud)

控制台日志

INFO 7284 --cinternal.database.DatabaseFactory的[main]:数据库:jdbc:h2:mem:testdb(H2 1.4)

INFO 7284 --- core.internal.command.DbValidate的[main]:已成功验证1次迁移(执行时间00:00.031s)

INFO 7284-cisJdbcTableSchemaHistory的[main]:创建Schema History表:“ PUBLIC”。“ flyway_schema_history”

INFO 7284 --- [main] ofcore.internal.command.DbMigrate:模式“ PUBLIC”的当前版本:<<空模式>>

INFO 7284 --- core.internal.command.DbMigrate的[main]:将模式“ PUBLIC”迁移到版本2-创建沉船

INFO 7284 --- core.internal.command.DbMigrate的[main]:已成功将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}

主要] org.hibernate.cfg.Environment:HHH000206:找不到hibernate.properties

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

main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.H2Dialect

主要] j.LocalContainerEntityManagerFactoryBean:持久性单元“默认”的已初始化JPA EntityManagerFactory

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>
Run Code Online (Sandbox Code Playgroud)

H2数据库表UI

数据库表

启动Spring Boot应用程序后,尚未创建该表,那么这里出了什么问题?

N. *_*hmi 3

根据您的描述(Flyway 正确执行,但之后没有观察到架构更改),这听起来像 Spring Boot 不会保留 H2 更改。您可以尝试添加spring.jpa.hibernate.ddl-auto=none到您的配置中application.properties,以便 JPA 配置不会覆盖 Flyway 迁移后的架构更改,按照这个问题