我研究了这个问题,发现了类似的问题,但是没有一个问题对我有用。
尝试运行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!
答案 0 :(得分:0)
首先,您必须通过将此选项spring.jpa.hibernate.ddl-auto
的值设置为none
来禁用或删除它,因为它会导致Hibernate更新您的数据库模式,但是您有一个Flyway。如documentation中所述,此属性
自动验证或将架构DDL导出到数据库时, SessionFactory已创建
第二件事,您必须添加此flyway.baselineOnMigrate = true
属性,以使Flyway使用非空模式。由于您的Hibernate现在不会使用任何数据填充架构,因此您不会遇到现有表的问题。