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

Flyway:找到非空架构“public”,没有架构历史记录表!在空数据库上使用baseline()

鲁望
2023-03-14

我正在尝试使用kotlin Spring Boot、jpa和postgreSQL配置flyway。我的gradle依赖项是:

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
    implementation('org.flywaydb:flyway-core')
    implementation('com.google.code.gson:gson')
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    runtimeOnly('org.postgresql:postgresql')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}

我的application.properties文件是:

spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://${JDBC_DATABASE_URL}/jpaTestDatabase
spring.datasource.username=${JDBC_DATABASE_USERNAME}
spring.datasource.password=${JDBC_DATABASE_PASSWORD}

flyway.baseline-on-migrate=true
flyway.locations=classpath:src/main/kotlin/db/migration

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
spring.session.store-type=none

使用jpa和hibernate创建表和条目按预期工作。但是,在空数据库上进行示例迁移会导致:

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: 
Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: 
Found non-empty schema(s) "public" without schema history table! Use baseline() or set baselineOnMigrate to true to initialize the schema history table.

我的目录结构是spring Initializer生成的默认目录结构,我的迁移位于:demo/src/main/kotlin/db/migration

我只有一个迁移,它是这里找到的示例迁移的kotlinized版本,我将其调整为如下:

class V1__Sample : BaseJavaMigration() {
  override fun migrate(context: Context?) {
    val statement = context?.connection?.prepareStatement(
      """
        CREATE TABLE article (
          id bigserial primary key,
          name varchar(20) NOT NULL,
          desc text NOT NULL
        );
      """
    )
    statement.use { it?.execute() }
  }
}

我错过了什么?当数据库完全为空(干净的docker映像)时,为什么Flyway总是抱怨在没有模式历史表的情况下找到非空模式“public”?


共有2个答案

丁经国
2023-03-14

也许你可以试试mvn flyway:清洁

司空俊悟
2023-03-14

假设您使用的是spring boot版本2。

在Spring Boot2中,前缀是“spring.flyway”,因此请尝试添加前缀Spring,如下所示。

<代码>Spring。飞行路线。迁移时的基线=真

spring.flyway.baselineOnMigrate=true

 类似资料:
  • 我刚刚在Maven学习Spring Boot,遇到了一个无法解决的错误。我从Flyway附加了一个依赖项,当我想安装它时(我单击Lifecycle上的install),会出现以下错误: 找到非空架构“PUBLIC”,但没有架构历史记录表。使用baseline()或将baselineOnMigrate设置为true来初始化架构历史记录表。 这可能是什么原因造成的,如何修复? 我正在使用Java8,我

  • 我正在尝试使用kotlin Spring boot、jpa和PostgreSQL配置flyway。我的分级依赖关系是: 我只有一个迁移,它是在这里找到的示例迁移的kotlinized版本,我对其进行了修改,以查看以下内容: 我错过了什么?为什么Flyway一直抱怨在数据库完全为空(干净的docker映像)的情况下,发现没有模式历史表的非空模式“public”?

  • 我知道以前有人问过这个问题,但我在这里绕圈子。。。。 我有一个postgres14数据库和一个运行flywaydb:7.13.0和flywaycore:8.5.10的Springboot应用程序 我正在使用 RDS。我使用 root 帐户手动创建了一个新数据库。当我运行Spring靴时,我的飞行路线迁移失败并出现错误 找到非空架构“public ”,但没有架构历史表。使用baseline()或将b

  • <代码>找到非空架构“public”,没有元数据表!使用init()或将initOnMigrate设置为true来初始化元数据表 我正在使用Postgres 9.2和Postgis 2.0。这意味着在默认情况下,当我创建新数据库时,将在名为spatial\u ref\u sys的模式中创建一个表 当我在这个数据库上运行flyway migrate时,我得到了上面的错误。运行init似乎创建了pub

  • 我有一个问题,我的记录json可以为null。如何处理avro模式中的空记录?给出的文档是针对我想要为null记录获取的null属性的。

  • 我正在尝试使用Flyway 4.2.0 Oracle 11g实现DB迁移 我有一个空模式: 当我尝试迁移时,Flyway说: 原因:<代码>组织。flywaydb。果心应用程序编程接口。FlywayException(FlywayException):找到了不带元数据表的非空架构“”!使用或将设置为初始化元数据表。 这是配置: 为什么我会收到此消息?我的基地是空的。