从Flyway 5.2.4升级至9.0.1遇NoSuchMethodError的解决方法
解决Spring Boot 2.7.0搭配Flyway 9.0.1时的NoSuchMethodError问题
错误原因
报错中的org.flywaydb.core.api.configuration.FluentConfiguration.ignoreMissingMigrations(Z)方法在Flyway 9.x版本中已被移除,而Spring Boot 2.7.0的自动配置类FlywayAutoConfiguration仍在调用该旧方法,导致版本不兼容。
解决方案
方案1:使用Spring Boot 2.7.x兼容的Flyway版本
Spring Boot 2.7.x官方适配的Flyway版本为8.x系列(推荐8.5.13),该版本既支持H2 2.x的语法特性,又能和Spring Boot自动配置完美兼容,无需额外自定义配置。
调整Maven依赖:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>8.5.13</version> </dependency>
方案2:强制使用Flyway 9.x并自定义配置
如果业务必须依赖Flyway 9.x的特性,需要绕过Spring Boot的自动配置,手动创建Flyway Bean:
- 禁用Spring Boot的Flyway自动配置:
@SpringBootApplication(exclude = FlywayAutoConfiguration.class) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
- 手动编写Flyway配置类,使用Flyway 9.x的新API替代旧方法:
@Configuration public class CustomFlywayConfig { @Bean public Flyway flyway(DataSource dataSource, Environment env) { return Flyway.configure() .dataSource(dataSource) // 迁移脚本路径,可读取原有配置 .locations(env.getProperty("spring.flyway.locations", "classpath:db/migration")) // 替代原ignoreMissingMigrations的配置 .ignoreMigrationPatterns("*:missing") // 根据需求添加其他配置(如baselineOnMigrate、sqlMigrationPrefix等) .baselineOnMigrate(true) .load(); } }
额外检查
- 执行
mvn dependency:tree命令,确保项目中没有引入旧版本的Flyway依赖,避免依赖冲突。 - 确认H2(2.1.214)与h2gis(2.1.0)的版本兼容,当前搭配是合理的,无需调整。
内容的提问来源于stack exchange,提问作者u4963840
相关产品推荐
相关产品推荐

