已升级Spring Boot与Flyway,Flyway仍提示MySQL 8.0版本不兼容
问题解决:Flyway 9.10.1 + Spring Boot 3.0.1 启动报错 Unsupported Database: MySQL 8.0
问题背景
已将Spring Boot升级至3.0.1,同时配置Flyway 9.10.1依赖,但启用Flyway后应用崩溃,报错:
Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 8.0 at org.flywaydb.core.internal.database.DatabaseTypeRegister.getDatabaseTypeForConnection(DatabaseTypeRegister.java:106) ~[flyway-core-8.5.13.jar:na]
移除Flyway依赖后应用可正常启动,且Flyway官方文档明确支持MySQL 8.0。
问题根源
- 依赖版本冲突:Spring Boot 3.0.1的默认依赖管理中,Flyway版本为8.5.13,手动指定的9.10.1未覆盖默认版本,导致运行时加载的是旧版Flyway核心包。
- Flyway 9.x架构变更:从Flyway 9开始,数据库适配逻辑不再包含在
flyway-core中,需要单独引入对应数据库的支持模块(如MySQL需flyway-mysql)。
解决方案
方案1:统一指定Flyway版本并添加MySQL支持模块(Gradle配置)
通过Spring Boot的依赖扩展统一设置Flyway版本,避免冲突,同时引入MySQL适配模块:
ext { set('flywayVersion', '9.10.1') } dependencies { // Spring相关依赖(保持原有配置) implementation("org.springframework.boot:spring-boot-starter-actuator") implementation("org.springframework.boot:spring-boot-starter-jooq") implementation("org.springframework.boot:spring-boot-starter-mail") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.security:spring-security-oauth2-resource-server") implementation("org.springframework.security:spring-security-oauth2-jose") implementation("org.springframework.security:spring-security-config") // Jooq相关依赖(保持原有配置) implementation("org.jooq:jooq:3.17.6") implementation("org.jooq:jooq-meta:3.17.6") implementation("org.jooq:jooq-codegen:3.17.6") jooqGenerator("mysql:mysql-connector-java:8.0.31") jooqGenerator('jakarta.xml.bind:jakarta.xml.bind-api:4.0.0') // Flyway依赖:使用指定版本的core和mysql模块 implementation 'org.flywaydb:flyway-core' implementation 'org.flywaydb:flyway-mysql' }
方案2:排除冲突依赖并手动指定版本
如果方案1不生效,可显式排除Spring Boot默认引入的旧版Flyway,再添加指定版本的依赖:
dependencies { // ... 其他依赖保持不变 // Flyway依赖:排除默认旧版本,添加指定版本的core和mysql模块 implementation('org.flywaydb:flyway-core:9.10.1') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-flyway' } implementation('org.flywaydb:flyway-mysql:9.10.1') }
验证依赖版本
执行Gradle命令检查依赖树,确认Flyway版本已正确更新为9.10.1:
./gradlew dependencies | grep flyway
内容的提问来源于stack exchange,提问作者Stuzfuz
相关产品推荐
相关产品推荐

