当前位置: 首页 > 知识库问答 >
问题:

Spring boot:Hibernate和Flyway引导顺序

淳于涛
2023-03-14

我希望Hibernate创建一个基于实体类的模式,然后Flyway填充表。现在Flyway在创建表之前启动v1__init.sql并抛出异常。我该如何改变这个顺序或者我能做什么解决方案?

spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect

pom.xml:

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

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

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.11.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency>

    <!-- For using 'LEGACYHTML5' mode in Thymeleaf -->
    <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
        <version>1.9.21</version>
    </dependency>
    <dependency>
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>1.4.01</version>
    </dependency>

    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>1.3.3.RELEASE</version>
    </dependency>
</dependencies>

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

共有1个答案

红甫
2023-03-14

Flyway的Spring Boot自动配置确保在初始化Hibernate之前运行数据库迁移。换句话说,您不能依赖Flyway自动配置并使用Flyway填充由Hinernate创建的表。

一个解决方案是完全接受Flyway,并使用它来创建表和填充表。然后可以关闭Hibernate的表创建(spring.jpa.hibernate.ddl-auto=none)。这种方法更加健壮,因为它将允许您的数据库更容易地发展。这是我建议你做的。

另一个解决方案是禁用Flyway(Flyway.enabled=false)的自动配置,并自行配置。然后,您可以将Flyway配置为依赖于Hibernate,以便在Flyway尝试填充表之前,Hibernate已经创建了表。

 类似资料:
  • 我添加了application.properties文件,如下所示: spring数据源(DataSourceAutoConfiguration&DataSourceProperties)Spring.DATASOURCE.url=jdbc:mysql://localhost:3306/test?usessl=false Spring.DATASOURCE.username=root Spring

  • 我有一个Java Spring Boot应用程序,在我的Maven pom.xml中将Flyway配置为依赖项(我有一个父pom和一个项目pom...Flyway是在我的项目pom中定义的)。 application.properties中只有几个条目: 我可以运行一个maven任务来让Flyway运行来创建/更新我的数据库,然后针对该数据库运行我的应用程序,但是我很难通过运行我的应用程序(这在p

  • 问题内容: 这是我永远遇到的一个问题。 据我所知,索引的顺序很重要。因此,类似的索引与 并不相同,对吧? 如果我仅定义第一个索引,是否意味着它将仅用于 而不是 由于我使用的是ORM,所以我不知道这些列的调用顺序。这是否意味着我必须在所有排列上添加索引?如果我有2列索引,那是可行的,但是如果我的索引是3列或4列怎么办? 问题答案: 当查询条件仅适用于 部分 索引时,索引顺序很重要。考虑: 如果你的索

  • 尝试从这个Axios调用中获取超文本标记语言,以在b选项卡中呈现。运气不好。除了那里,它在任何地方都有效。对Vue来说还是很新鲜的,有点困惑我在这里错过了什么。我觉得编译在这里可能很有用,但也可能是过度的。 HTML: Vue:

  • 是否可以根据我使用的Spring Boot配置文件加载不同的log4j配置。 假设我在application.properties中 在application-live.properties中,我为所有3个都有不同的值

  • 问题内容: 我在右列中有2列和嵌套行,如何使Bootstrap响应如下, 布局: 这是我的代码: 使用此代码,移动版本为1 3 2的订单为1 2 3。 问题答案: 因为Bootstrap 4使用的是flexbox,所以 列的高度总是相等的 ,因此您将无法获得所需的桌面(lg)布局。 一种选择 是禁用的flexbox 。使用 浮点数 ,以使1,3列自然向右拉,因为2更高。Flexbox 将在移动设备