Spring应用使用MongoTemplate连接MongoDB时出现NoSuchMethodError求助
问题分析与解决方案
问题根源
这个NoSuchMethodError是Spring核心依赖版本冲突导致的:
spring-data-mongodb:3.4.6属于Spring Data 2021.2.x版本,依赖的Spring核心版本为5.3.x,它调用的org.springframework.util.Assert.noNullElements(Collection, String)方法是Spring 4.3及以上版本才新增的。- 但你的类路径中同时存在多个低版本Spring组件(如
spring-context-support:2.5.6、spring-web:3.0.2.RELEASE),这些旧版本的Assert类中没有该方法。当类加载器优先加载旧版本类时,就会抛出方法缺失异常。 - 此外pom中指定的
spring-web:3.0.2与类路径中的spring-web:5.3.22版本冲突,进一步加剧了依赖混乱。
解决方案
方案1:手动统一Spring依赖版本
- 替换pom中低版本的Spring依赖,与类路径中已有的
5.3.x版本保持一致:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.24</version> <!-- 和spring-context、spring-tx版本对齐 --> </dependency>
- 清理或升级类路径中的旧版本Spring组件:
- 移除
spring-context-support:2.5.6、spring-jms:2.5.6这类低版本依赖;若业务需要,升级到5.3.x版本。
- 移除
- 执行依赖树检查命令,确保所有Spring相关依赖版本统一:
mvn dependency:tree
方案2:使用Spring Boot依赖管理(推荐)
如果是Spring Boot项目,直接通过父依赖自动管理所有兼容版本,避免手动版本冲突:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.6</version> <!-- 该版本对应spring-data-mongodb:3.4.6,版本完全兼容 --> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies>
引入后无需手动指定Spring、Spring Data MongoDB及MongoDB驱动的版本,父依赖会自动维护一套兼容的版本组合。
内容的提问来源于stack exchange,提问作者Swapnil Patil
相关产品推荐
相关产品推荐

