关于MongoDB,有一个核心操作类:MongoTemplate,使用这个MongoDB模板类可以很方便的对MongoDB数据进行CRUD操作,而这个类位于spring-data-mongodb这个jar包下,所以在使用maven进行web开发时,我们需要在pom.xml下引入依赖。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.0</version>
</dependency>
在操作过程中,老是出现如下错误:
java.lang.NoSuchMethodError:org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)
起初,以为是MongoDB的配置出了问题,但是经过调试,发现mongo-config.xml文件是没有问题的。
由于项目使用了spring框架,所以pom.xml文件引入了很多依赖,初步判断是依赖版本冲突导致,但是却无从下手。
经过度娘,了解到了spring-context (<spring.version>4.1.6.RELEASE</spring.version>)中会有spring-expression的版本信息
但是,在spring-data-mongodb 2.0.8.RELEASE的版本中也存在了spring-expression的版本信息,于是乎,这两者便产生了冲突
找到了问题所在,接下来便是解决问题了。
方法一:把 <artifactId>spring-data-mongodb</artifactId>
<version>2.0.8.RELEASE</version>
换成 <artifactId>spring-data-mongodb</artifactId>
<version>1.4.2.RELEASE</version>
也即是把 spring-data-mongodb 换成较低的 1.4.2.RELEASE 版本
方法二: 有网友说,在 spring-data-mongodb 依赖中去除 spring-expression 的版本信息,但是,此种方法在spring-data-mongodb的版本为2.0.8.RELEASE还是会不能解决问题,我在想,是不是2.0.8版本太高,其中不止spring-expression存在冲突,还有其它的spring包冲突
至此,使用第一种方法,解决折腾了一个上午的版本信息冲突问题,所以说程序猿的时间都去哪里了呢!!
另外,虽然说spring等一些主流框架会给我们带来开发上极大的便利了,但是有一些极细节的坑却是很多人都会不经意就会猜到,就像是上面的版本信息问题,相信很多人都遇到过