一个spring-boot的项目中需要连接mongodb,于是在maven中引入了spring-boot-starter-data-mongodb。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.1.0.RELEASE</version>
<scope>provided</scope>
</dependency>
为什么引入2.1.0这么老旧的版本,是因为参考另外一个项目中MongoFactory的实现方法。
String url = properties.getProperty("url");
MongoClientURI mongoclienturi = new MongoClientURI(url);
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoclienturi);
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
这种写法在旧的项目里面运行完全正常,但是在新的项目里面却报错。

image.png
What???这个SimpleMongoDbFactory我不是已经import了吗???
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
为什么一个项目没有问题,一个项目报错???
于是我去对比两个项目的不同,发现dependency的版本号不一样。

旧的项目中spring-data-mongodb的版本是2.1.2。

image.png
而新的项目里面是3.0.0。
我开始怀疑maven出问题了,于是把这些包全部删除,刷新maven,还是一样的报错。
而且我在mvnrepository.com网站上看到spring-boot-starter-data-mongodb:2.1.0.RELEASE依赖的就是spring-data-mongodb:2.1.3.RELEASE啊

image.png

image.png
到底问题出在哪里?
最后发现问题不是出之spring-boot-starter-data-mongodb这一层,而是spring-boot-starter-parent这一层。
旧的项目用的是2.1.0.RELEASE,所以spring-data-mongodb的版本是2.1.2.RELEASE。
而新的项目用的是2.3.0.RELEASE,所以spring-data-mongodb的版本是3.0.0.RELEASE,这这个版本确实不支持SimpleMongoDbFactory。