spring - 在 flyway 迁移脚本之前执行 JPA 表创建

标签 spring spring-boot jpa flyway

我想使用这个 Spring 属性文件来配置数据库。

spring.jmx.enabled=false
spring.datasource.jndi-name=java:/global/production
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
request.limit=300000
spring.flyway.baselineOnMigrate = true
spring.flyway.locations=classpath:/db/migration

代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到 SQL 错误,因为首先执行迁移脚本。

如何先配置 JPA 来创建表,然后配置 flyway 来执行迁移脚本?

最佳答案

Flyway 迁移在休眠执行之前运行。您可以通过查看引导顺序来做到这一点。为此,您需要添加此配置类:

import org.flywaydb.core.Flyway;
import 
org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

@Configuration
public class MigrationConfiguration {


/**
 * Override default flyway initializer to do nothing
 */
@Bean
FlywayMigrationInitializer flywayInitializer(Flyway flyway) {
    return new FlywayMigrationInitializer(flyway, (f) ->{} );
}


/**
 * Create a second flyway initializer to run after jpa has created the schema
 */
@Bean
@DependsOn("entityManagerFactory")
FlywayMigrationInitializer delayedFlywayInitializer(Flyway flyway) {
    return new FlywayMigrationInitializer(flyway, null);
}


}

this回答你会得到详细信息。

关于spring - 在 flyway 迁移脚本之前执行 JPA 表创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51637581/

相关文章:

java - Hibernate:通过示例和多对一关系进行查询

mysql - 是否可以在 Java 代码中实现数据库 'trigger'? (hibernate + jpa + spring + mysql)

java - 即使给出了正确的提供程序,也会发生有关 PersistenceProvider 的 Hibernate 警告

java - 异常处理错误场景

java - Spring MVC : Generating links which match the controller url pattern

spring - redirect_uri 使用 http 而不是 https

java - GSON 到 JSON 转换 - 长格式和简单日期格式 "yyyy-MM-dd' T'HH :mm'Z'"

java - Spring Boot JPA - ManyToOne关系导致额外的sql

java - 设置 WebClient.Builder.exchangeStrategies() 而不丢失 Spring Jackson 配置

Spring @Scheduled 每天在 4 :00AM and 4:30AM 之间的随机分钟开始