xar*_*rqt 11 database sql-server spring flyway spring-boot
我想在 SQL Server 数据库上导入一些数据,我使用的是 Spring Boot 2.3.4。我还使用 Hibernate 来生成表。
我在pom中添加了flyway核心:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
创建了配置文件:
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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个文件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
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,我寻找解决方案但无法解决。有人能帮助我吗?
ame*_*een 24
您很可能通过添加以下内容来推迟数据源初始化:
spring.jpa.defer-datasource-initialization =true #set it to false
Run Code Online (Sandbox Code Playgroud)
在您的应用程序中。[yml/properties]。
如参考中所示: https ://docs.spring.io/spring-boot/docs/current/reference/html/howto.html
将 spring.jpa.defer-datasource-initialization 设置为 true。这将推迟数据源初始化,直到创建并初始化任何 EntityManagerFactory bean 之后。然后可以使用 schema.sql 对 Hibernate 执行的任何模式创建进行添加,并且可以使用 data.sql 来填充它。
并且默认情况下 Flyway 依赖于 Datasource , defer 模式下的 Datasource 会等待 EntityManagerFactory 和 Ofc 因为我们使用 Flyway 默认是在 Jpa 之前启动 Flyway 以保证 DB 一致性
所以我们有一个循环依赖flyway->DS->EMF->Flyway
| 归档时间: |
|
| 查看次数: |
8997 次 |
| 最近记录: |