【发布时间】:2021-03-07 10:47:56
【问题描述】:
我想在 SQL server 数据库上导入一些数据,我使用的是 Spring Boot 2.3.4。我也使用 Hibernate 来生成表格。
我在 pom 中添加了 flyway 核心:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
创建了配置文件:
import org.flywaydb.core.Flyway;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
@Configuration
public class FlyWayConfiguration {
@Bean
FlywayMigrationInitializer flywayInitializer(Flyway flyway) {
return new FlywayMigrationInitializer(flyway, (f) ->{} );
}
@Bean
@DependsOn("entityManagerFactory")
FlywayMigrationInitializer delayedFlywayInitializer(Flyway flyway) {
return new FlywayMigrationInitializer(flyway, new FlywayMigrationStrategy() {
@Override
public void migrate(Flyway flyway) {
flyway.migrate();
}
});
}
}
我在resources/db/migration/V1_0_1__InitialData.sql上创建了一个文件
现在我遇到了这个错误
Error creating bean with name 'delayedFlywayInitializer' defined in class path resource
[com/ikun/mkj/config/MigrationConfiguration.class]: Circular depends-on relationship between
'delayedFlywayInitializer' and 'entityManagerFactory' at
org.springframework.beans.factory.support.AbstractBeanFactory
我不知道如何解决这个问题,我搜索了解决方案但无法解决。 有人可以帮帮我吗?
【问题讨论】:
-
嗨,你需要这个
@DependsOn("entityManagerFactory")吗?如果您删除该问题可能会解决 -
如果我删除它,flyway在hibernate创建表之前初始化,因此脚本迁移失败导致表尚未创建,所以这是问题吗? @MarcosBarbero
-
我明白了,但是你不需要 Hibernate 来创建你的模式,你可以使用 Flyway 来做到这一点。将两者混合只会让您更加困难
-
我需要使用 Hibernate 来创建表格和其他一切。关于flyway,我还能用什么来迁移数据?
-
虽然 Hibernate 支持该操作,但您不需要使用它来执行此操作。 Flyway 不仅用于数据迁移,它还是一个工具,使您能够对数据库进行版本控制,您可以使用 Flyway 创建与数据库相关的任何您需要的表、模式。
标签: sql-server spring database spring-boot flyway