spring-boot - flyway 5.2.4如何升级到9.0.1?

标签 spring-boot maven h2 flyway

我有使用 flyway 5.2.4 的 spring boot 2.7.0 maven 项目。我需要将 flyway 升级到更新的版本。

这一切都是因为我需要更新 h2 和 h2gis-functions 以便我可以使用 h2 1.4.200 或更新版本,因为我需要 h2 v 1.4.200 的新功能。 目前,我的 pom.xml 中有 com.h2database:h2:1.4.197org.orbisgis:h2gis-functions:1.3.2 依赖项。这两个需要相互兼容。据我了解,并非所有版本都兼容。所以我决定试试 com.h2database:h2:2.1.214org.orbisgis:h2gis:2.1.0 是否有效

完成后我开始得到以前没有得到的错误:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT [*]VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'info.BUILD_ID'"; expected "DISTINCT, ALL, *, INTERSECTS (, NOT, EXISTS, UNIQUE, INTERSECTS"; SQL statement: SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'info.BUILD_ID' [42001-214]

据我所知,这是由老飞路引起的。在我的 pom.xml 项目中,我有 flyway 5.2.4。在谷歌搜索这个问题后,我遇到了这个 stackoverflow 帖子:H2 version change issue from 1.4.200 to 2.0.202?

有类似的错误(无法找到完全相同的错误)。那里建议发帖者应将 flyway 升级到 8.2.2 或任何更新版本。我不确定我是否一定需要 flyway 9.0.1,或者任何旧版本是否也可以,但看起来我需要一些更新版本的 flyway。

将 flyway 版本更新到 9.0.1 并尝试运行测试后,应用程序不再启动。

我得到的错误是:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.core.Flyway]: Factory method 'flyway' threw exception; nested exception is java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfiguration.ignoreMissingMigrations(Z)Lorg/flywaydb/core/api/configuration/FluentConfiguration;
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:330)
    ... 207 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.flywaydb.core.Flyway]: Factory method 'flyway' threw exception; nested exception is java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfiguration.ignoreMissingMigrations(Z)Lorg/flywaydb/core/api/configuration/FluentConfiguration;
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
    ... 219 more
Caused by: java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfiguration.ignoreMissingMigrations(Z)Lorg/flywaydb/core/api/configuration/FluentConfiguration;
    at org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration.configureIgnoredMigrations(FlywayAutoConfiguration.java:264)
    at org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration.configureProperties(FlywayAutoConfiguration.java:205)
    at org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration.flyway(FlywayAutoConfiguration.java:119)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 220 more
Caused by: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfiguration.ignoreMissingMigrations(Z)Lorg/flywaydb/core/api/configuration/FluentConfiguration;
    at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
    at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:975)
    at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1000)
    at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1394)
    at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1750)
    at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
    ... 228 more

如何修复 NoSuchMethodError

最佳答案

出现此错误是因为方法 ignoreMissingMigrations在 Flyway 8.x 中被弃用并在 Flyway 9.x 中被移除。 看到这个: https://github.com/flyway/flyway/issues/3484

因为即使是最新的 Spring Boot(目前为 2.7.2)仍然使用 ignoreMissingMigrationsFlywayAutoConfiguration class 解决这个问题的唯一方法是或者:

  • 使用 Flyway 8.x
  • 禁用 Spring FlywayAutoConfiguration并在使用 Flyway 9.x 时使用手动编写的 FlywayConfiguration 配置 Flyway

关于spring-boot - flyway 5.2.4如何升级到9.0.1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73068931/

相关文章:

spring - 如何在 Spring boot 中使用属性文件添加 Cassandra MaxRequestsPerConnection

maven - 无法从 JCenter 下载我在 Bintray 上发布的文件

java - Hibernate 不创建 h2db 表

java - 使用 ORMLite 准备查询的 SQL 异常

spring-boot - Spring Boot 2 NoSuchMethodException : org. springframework.mobile.device.Device.<init>()

java - 如何使用 Jackson 全局定义命名约定

java - 当 ActiveMQ 故障转移传输失败时,Spring Boot 应用程序不会启动

java - 在 war 中的类文件夹中找不到类

java - 此环境中不提供编译器。也许您在 JRE 而不是 JDK 上运行?

java - H2 内存数据库。找不到表