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

Flyway H2和MySql升级后不匹配

宁锐
2023-03-14

我陷入了深深的泥潭:(

我想把gradle从4升级到6。这让我升级了spring,最终升级了flyway和H2。

现在,不幸的是,我在测试中遇到了飞行路线错误。

以下是一些信息:

 api "org.springframework.boot:spring-boot-starter-json:2.2.2.RELEASE"
api "org.springframework.boot:spring-boot-starter-web:2.2.2.RELEASE"
    api "org.springframework.boot:spring-boot-starter-data-jpa:2.2.2.RELEASE"
testImplementation("org.springframework.boot:spring-boot-starter-test:2.2.2.RELEASE") {
    exclude (group: 'com.h2database', module: 'h2')
}

api("mysql:mysql-connector-java:5.1.38")
implementation 'org.flywaydb:flyway-core:6.4.2'
testImplementation("com.h2database:h2:1.4.199") {
  force = true
}

在升级之前,一切正常。现在我收到了关于另一个版本(尽管我使用的是推荐的)版本的奇怪警告,以及大量或错误。:

 WARN  o.f.c.i.d.b.Database:53 - Flyway upgrade recommended: H2 1.4.200 is newer than this version of Flyway and support has not been tested. The latest supported version of H2 is 1.4.199.

ERROR o.f.c.i.c.DbMigrate:57 - Migration of schema "PUBLIC" to version 9 - fixCheckingAccountIndex failed! Please restore backups and roll back database and code!


SQL State  : 42S22
Error Code : 42122
Message    : Column "INDEX" not found; SQL statement:
ALTER TABLE table1 DROP INDEX ACC_INDEX [42122-200]
Location   : db/migration/V9__fixAccountIndex.sql 
Line       : 1
Statement  : ALTER TABLE checking_account DROP INDEX BTA_CHECKING_ACC_INDEX

测试属性:

spring.jpa.hibernate.ddl-auto=none
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE;INIT=create schema if not exists \\"public\"\\; SET SCHEMA public;
spring.datasource.username=root
spring.datasource.password=root

当我正常运行应用程序时,没有测试,一切正常。

有什么想法吗?

谢谢和问候,

编辑

我一直在试图理解为什么我得到了H2的200版本。

在我的depndecy树上:

gradle -q dependencies | grep h2
+--- com.h2database:h2:1.4.199 (n)
|    |    |         +--- com.h2database:h2:1.4.193 -> 1.4.200
+--- com.h2database:h2:1.4.199 -> 1.4.200
|    |    |         +--- com.h2database:h2:1.4.193 -> 1.4.200
+--- com.h2database:h2:1.4.199 -> 1.4.200
|    |    |         +--- com.h2database:h2:1.4.193 -> 1.4.200
+--- com.h2database:h2:1.4.199 -> 1.4.200
|    |    |         +--- com.h2database:h2:1.4.193 -> 1.4.200
+--- com.h2database:h2:1.4.199 -> 1.4.200

出于某种原因,它使用了较新的verison。

编辑2020-05-26

按照要求,这里是升级到spring 2.3.0后的错误

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in com...SpringTestConfiguration: Invocation of init method failed; nested exception is org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: 
Migration V9__IndexFix.sql failed
------------------------------------------------
SQL State  : 42S22
Error Code : 42122
Message    : Column "INDEX" not found; SQL statement:
ALTER TABLE table1 DROP INDEX ACC_INDEX [42122-200]
Location   : db/migration/V9__IndexFix.sql (.../resources/db/migration/V9__IndexFix.sql)
Line       : 1
Statement  : ALTER TABLE table1 DROP INDEX ACC_INDEX

升级后,我在这篇帖子中抱怨的兼容性警告消失了

仍然是这个h2错误。在旧版本上它有效。当前版本:

组织。flywaydb:flyway core:6.4.1(虽然在gradle我放了6.4.2)com。h2数据库:h2:1.4.200

共有1个答案

壤驷深
2023-03-14

将您的Spring Boot依赖项更新为2.3.0。发布。

2.2。X在旧flyway版本(6.0.8)和不受支持的新H2版本(1.4.200)之间存在依赖不匹配。
Flyway 6.1.0支持H2 1.4.200。

即使您指定了一个更新的Flyway版本,我认为它也会像指定的H2版本一样被忽略。

编辑:
或者,您可以在Gradle中强制特定版本,如下所示:

allprojects {
    configurations.all {
        resolutionStrategy {
            dependencySubstitution {
                substitute module('com.h2database:h2') with module('com.h2database:h2:1.4.199')
            }
        }
    }
}
 类似资料:
  • 2.10.1. 从5.0版升级 2.10.2. 升级授权表 2.10.3. 将MySQL数据库拷贝到另一台机器 做为一般原则,我们建议从一个发布系列升级到另一个发布系列时,你应当先升级到它的下一个系列而不要跳过。例如,如果你目前正运行MySQL 3.23,想要升级到较新的系列,要升级到MySQL 4.0而不要升级到5.0或5.1。 下面的项列出了升级时的相关信息: ·从MySQL 5.0升级到5.

  • 我用Play2.0创建了一个应用程序。我实现了scribe-java库来使用一些OAuth服务。直到今天,一切都很好,但当我升级jdk并重新启动服务器时,我不能使用scribe-java库。它似乎在sun.security包中使用了和类,但找不到。 “java-version”返回: 播放2.0 StackTrace:

  • 从带有SP1的AEM 6.2升级到AEM 6.4后,很少有软件包未安装。旧版本处于已安装状态。 对于新软件包,显示消息为“似乎安装了另一个版本:”请参见下面的屏幕截图。 正因为如此,我可以看到很少的脚本没有更新最新的API。例如AEM 6.4升级实例:

  • 我最近更新了我的自制Python 3.8安装。2至3.8。3.做完后,我跑了 以检查是否有任何更新。它更新了我从20.0安装的。2至20.1。1,并且自从我运行该命令以来,在我尝试使用它的任何时候都会抛出一个错误。以下是错误: 升级过程中似乎出现了一些问题,未能更改代码中的版本检查。我看到了类似的问题,但公认的答案对我来说并不适用。如何使再次可用?

  • 我尝试使用以下命令升级pip3: 安装升级pip 但不幸的是,它不再工作,并显示以下信息: pip3——版本 信息: 回溯(最后一次调用): 文件/usr/local/lib/python3.4/dist-packages/pkg_-resources/init.py”,第651行,在“构建主ws.require(requires) 文件/usr/local/lib/python3.4/dist-

  • 我正在运行《docker compose》中的jenkins,来自图片jenkins/jenkins。升级到Jenkins 2.277.1后,LDAP身份验证停止工作,我无法登录。我收到以下错误: 詹金斯。docker。new\u 1 | 2021 06-04 14:49:31.3110000[id=138]警告o.j.p.p.DiskUsageCollector#collect:无法获取磁盘使用