gpt4 book ai didi

java - 找到没有元数据表的非空架构 `schema_name`

转载 作者:行者123 更新时间:2023-11-30 12:07:58 25 4
gpt4 key购买 nike

我研究了这个问题并发现了类似的问题,但没有一个有适合我的答案。

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

此错误是 FlywayException 的结果

问题似乎出现了,因为数据库已经有一个名为“schema_name”的模式,而 flyway 在发现这个非空模式时不知道如何 react 。该架构被产品代码中的更多包和类使用,没有飞路问题。

该架构已经有一个 flyway_schema_history 表,该表以 Flyway Baseline 开头。

错误输出如下所示:

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 尝试运行最初添加数据库表的 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 并取消了 hibernate 行,但收到​​以下错误:

2019-02-06 10:07:32.233 INFO 82403 --- [main] o.f.c.i.dbsupport.DbSupportFactory:数据库: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:验证了 31 个迁移(执行时间 00:00.027s)
2019-02-06 10:07:32.318 INFO 82403 --- [main] o.f.c.i.metadatatable.MetaDataTableImpl:创建元数据表:schema_name.schema_version
2019-02-06 10:07:32.379 INFO 82403 --- [main] o.f.core.internal.command.DbBaseline:架构基线版本:1
2019-02-06 10:07:32.395 INFO 82403 --- [main] o.f.core.internal.command.DbMigrate:架构 schema_name 的当前版本:1
2019-02-06 10:07:32.395 INFO 82403 --- [main] o.f.core.internal.command.DbMigrate:将架构 schema_name 迁移到版本 2.0 - 创建 TABLE_NAME 表
2019-02-06 10:07:32.407 WARN 82403 --- [main] o.f.c.internal.dbsupport.JdbcTemplate:DB:表“TABLE_NAME”已存在(SQL 状态:42S01 - 错误代码:1050)
2019-02-06 10:07:32.409 ERROR 82403 --- [main] o.f.core.internal.command.DbMigrate:模式 schema_name 迁移到 2.0 版失败!请恢复备份并回滚数据库和代码!

最佳答案

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

Automatically validates or exports schema DDL to the database when the SessionFactory is created

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

关于java - 找到没有元数据表的非空架构 `schema_name`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54532885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com