Spring Data MongoDB从1.9.6.RELEASE升级到2.0.0.RELEASE启动报错求助
这个启动报错的核心原因是Spring Boot版本和Spring Data MongoDB版本不匹配,进而引发了方法实现缺失的AbstractMethodError。
版本兼容性背景
Spring Boot的版本和Spring Data系列的版本是严格绑定对应的:
- Spring Boot 1.4.x对应的是Spring Data Gosling系列(版本号1.9.x)
- Spring Data MongoDB 2.0.0.RELEASE属于Kay系列,这个系列仅兼容Spring Boot 2.0.x及以上版本
你现在强行在Spring Boot 1.4.2环境中使用Spring Data MongoDB 2.0.0,就会出现接口方法不匹配的问题——MongoRepositoryConfigurationExtension在2.0版本新增了getRepositoryFactoryClassName()方法,但旧版本的Spring Data Commons(由Spring Boot 1.4.2引入)会调用这个方法,而你的环境里的扩展类并没有实现它,最终抛出AbstractMethodError。
两种可行解决方案
方案1:升级Spring Boot到兼容版本
如果你一定要使用Spring Data MongoDB 2.0.0.RELEASE,需要把Spring Boot升级到2.0.x版本(比如2.0.9.RELEASE,是该系列的稳定版本)。升级后,Spring Boot会自动管理对应的Spring Data依赖版本,无需手动指定Spring Data MongoDB的版本,能有效避免版本冲突。修改后的pom依赖可以去掉版本号,让Spring Boot自动管理:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> </dependency>方案2:使用Spring Boot 1.4.2对应的Spring Data MongoDB版本
如果你暂时不想升级Spring Boot,那么需要保持Spring Data MongoDB在1.9.x系列,推荐使用该系列的最后一个稳定版本1.9.13.RELEASE,这样能保证和Spring Boot 1.4.2的完全兼容性:<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.9.13.RELEASE</version> </dependency>
验证建议
不管选择哪种方案,修改pom后都建议清理本地Maven仓库的缓存(删除~/.m2/repository中相关的Spring Data和Spring Boot依赖),然后重新编译项目,避免缓存的旧依赖导致问题残留。
内容的提问来源于stack exchange,提问作者Divyang Agrawal

