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

Flyway:找到非空的模式“public”,没有模式历史表!使用baseline()-在空数据库上

伯彦君
2023-03-14

我正在尝试使用kotlin Spring boot、jpa和PostgreSQL配置flyway。我的分级依赖关系是:

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')
}
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
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.

我只有一个迁移,它是在这里找到的示例迁移的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() }
  }
}

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

共有1个答案

齐承运
2023-03-14

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

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

spring.flyway.baseline-on-migrate=true

spring.flyway.baselineonmigrate=true

 类似资料:
  • 我正在尝试使用kotlin Spring Boot、jpa和postgreSQL配置flyway。我的gradle依赖项是: 我的application.properties文件是: 使用jpa和hibernate创建表和条目按预期工作。但是,在空数据库上进行示例迁移会导致: 我的目录结构是spring Initializer生成的默认目录结构,我的迁移位于:

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

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

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

  • 首先,我将用现实生活中的例子来解释我的问题。假设我们是一家公司,我们销售不同的运输工具,例如汽车、公共汽车、卡车、火车、飞机等。假设我们有大约10,000,000种不同的产品,每天都有变化。 对于每个项目,我们都有一个唯一的名称(例如,汽车奥迪A8 X或飞机波音747-200by),其中X和Y是唯一的值。不用担心命名,因为它工作很好。 对于每一项,我们也有一些特殊的数据。数据取决于类型,例如汽车:

  • 我已经通读了Flyway(2.1.1)留档,我只是想澄清一点… 我将当前的DDL从生产数据库转储到一个文件V1__baseddl.sql中。我验证了我们的QA数据库有一个与生产相匹配的模式。 我现在想把我们的QA数据库置于Flyway管理之下(接着是生产)。我们通过API使用Flyway。我调用了flyway.setInitVersion(1),然后是flyway.init(),我希望它能找到V1