Flyway 6.5.7与Spring Boot 2.5.x版本兼容问题如何解决?
根因说明
Spring Boot 2.5.x 版本的Flyway自动配置组件针对Flyway 7.x及以上版本做了适配,Flyway 7.x新增了flyway.name配置项用于标识迁移实例,Spring Boot 2.5的自动配置逻辑会强制读取该属性注入到Flyway实例中。而你当前使用的Flyway 6.5.7版本不支持该配置项,也没有默认值,就会触发java.lang.IllegalArgumentException: Name must not be null异常。
解决方案
提供两个可选方案:
- 方案1:升级Flyway到兼容版本
Spring Boot 2.5.x默认适配的Flyway最低版本为7.7.3,你可以直接在Gradle配置中指定Flyway版本为7.7.3及以上稳定版即可兼容,无需修改其他业务配置。
Gradle配置示例:
// 在build.gradle的ext配置块中指定flyway版本,覆盖Spring Boot默认管理的版本 ext { set('flyway.version', '7.15.0') }
如果是单独声明Flyway依赖,直接修改依赖声明中的版本号即可。
- 方案2:保留Flyway 6.5.7版本,补充兼容配置
如果暂时不需要升级Flyway版本,可以通过以下两种方式之一兼容:- 在配置文件中新增
spring.flyway.name配置,赋值任意非空字符串即可绕过空值校验:
application.properties示例:
application.yml示例:spring.flyway.name=db-migrationspring: flyway: name: db-migration- 如果添加上述配置仍有问题,可以自定义Flyway Bean覆盖Spring Boot的自动配置,避免自动注入不兼容的属性:
import org.flywaydb.core.Flyway; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class FlywayCustomConfig { @Bean public Flyway flyway(DataSource dataSource) { return Flyway.configure() .dataSource(dataSource) .locations("classpath:db/migration") // 补充你原有使用的其他Flyway配置,比如baseline-on-migrate、encoding等 .load(); } } - 在配置文件中新增
优先推荐方案1,避免后续出现其他版本兼容问题。
内容的提问来源于stack exchange,提问作者Roger Hood
相关产品推荐
相关产品推荐

