找到了没有元数据表的非空模式“ schema_name”

时间:2019-02-05 10:58:28

标签: java flyway

我研究了这个问题,发现了类似的问题,但是没有一个问题对我有用。

尝试运行Spring应用程序时,它失败,因为启动ApplicationContext时出错。

此错误是FlywayException的结果

该问题似乎是由于数据库已经具有一个名为“ schema_name”的模式而引起的,并且当它找到这个非空模式时,flyway不知道如何反应。产品代码中的更多程序包和类使用了该模式,而没有飞行问题。

该模式已经具有一个以Flyway基线开头的flyway_schema_history表。

错误输出如下所示:

Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Found non-empty schema `schema_name` without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.

我曾尝试设置flyway.baselineOnMigrate = true,但这导致了另一个问题,即flyway试图运行最初添加了DB表的SQL文件-显然它们不存在!

我的application.properties文件具有用于数据源的以下代码:

spring.datasource.url=jdbc:mysql://localhost:3306/schema_name
spring.datasource.username=user
spring.datasource.password=pass
spring.jpa.hibernate.ddl-auto=update

pom文件包含用于flyway依赖项的文件,其中flyway.version为5.0.7:

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>${flyway.version}</version>
</dependency>

有人遇到过类似的问题吗?

更新

我尝试了第一个答案,其中添加了fly.baselineOnMigrate并删除了休眠行,但收到​​以下错误:

2019-02-06 10:07:32.233 INFO 82403 --- [ main] o.f.c.i.dbsupport.DbSupportFactory : Database: jdbc:mysql://localhost:3306/schema_name (MySQL 5.7) 2019-02-06 10:07:32.272 INFO 82403 --- [ main] o.f.core.internal.command.DbValidate : Validated 31 migrations (execution time 00:00.027s) 2019-02-06 10:07:32.318 INFO 82403 --- [ main] o.f.c.i.metadatatable.MetaDataTableImpl : Creating Metadata table: schema_name.schema_version 2019-02-06 10:07:32.379 INFO 82403 --- [ main] o.f.core.internal.command.DbBaseline : Schema baselined with version: 1 2019-02-06 10:07:32.395 INFO 82403 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema schema_name: 1 2019-02-06 10:07:32.395 INFO 82403 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema schema_name to version 2.0 - Creates TABLE_NAME tables 2019-02-06 10:07:32.407 WARN 82403 --- [ main] o.f.c.internal.dbsupport.JdbcTemplate : DB: Table 'TABLE_NAME' already exists (SQL State: 42S01 - Error Code: 1050) 2019-02-06 10:07:32.409 ERROR 82403 --- [ main] o.f.core.internal.command.DbMigrate : Migration of schema schema_name to version 2.0 failed! Please restore backups and roll back database and code!

1 个答案:

答案 0 :(得分:0)

首先,您必须通过将此选项spring.jpa.hibernate.ddl-auto的值设置为none来禁用或删除它,因为它会导致Hibernate更新您的数据库模式,但是您有一个Flyway。如documentation中所述,此属性

  

自动验证或将架构DDL导出到数据库时,   SessionFactory已创建

第二件事,您必须添加此flyway.baselineOnMigrate = true属性,以使Flyway使用非空模式。由于您的Hibernate现在不会使用任何数据填充架构,因此您不会遇到现有表的问题。