Spring Boot启动时Flyway适配H2/Oracle数据库报错求助
两类Flyway启动报错的解决方案
一、H2数据库启动报错处理
错误原因
- 版本兼容冲突:Flyway 7.2.1不支持H2 2.x版本(当前用的是2.1.214)。H2 2.x重构了
INFORMATION_SCHEMA结构,且VALUE成为关键字,导致Flyway执行的查询语句触发语法错误。 - 数据库实例不一致:Spring数据源配置的是
jdbc:h2:mem:ppyDB,但Flyway单独指定了jdbc:h2:mem:myDB,两者使用独立的内存数据库实例,Flyway无法正确识别数据源配置。
解决方案
方案1:降级H2到兼容版本
将H2版本改为Flyway 7.x支持的1.4.200:
"h2", "1.4.200"
同时统一Flyway与数据源的数据库URL,修改application.yaml:
spring: flyway: url: jdbc:h2:mem:ppyDB;MODE=Oracle;DB_CLOSE_DELAY=-1
方案2:升级Flyway支持H2 2.x
Flyway 8.0及以上版本适配H2 2.x,升级到与Spring Boot 2.7.8兼容的8.5.13版本:
"flyway", "8.5.13"
同样需要统一Flyway与数据源的数据库URL,确保指向同一内存实例。
二、Oracle 12.1数据库启动报错处理
错误原因
Flyway 7.2.1社区版已停止支持Oracle 12.1,该版本Oracle的支持仅保留在付费的Teams Edition中。
解决方案
方案1:升级Oracle数据库版本
将Oracle升级到12.2及以上版本(推荐19c/21c),Flyway社区版支持这些新版本。
方案2:切换到Flyway Teams Edition
若无法升级Oracle,需使用付费的Flyway Teams Edition,它仍支持Oracle 12.1。需替换依赖为Teams版坐标,并配置对应的授权密钥。
方案3:降级Flyway到兼容版本
Flyway 6.x系列社区版仍支持Oracle 12.1,降级到与Spring Boot 2.7.8兼容的6.5.7版本:
"flyway", "6.5.7"
注意:降级会丢失Flyway 7.x的新特性,需评估业务影响。
内容的提问来源于stack exchange,提问作者Shabar
相关产品推荐
相关产品推荐

