> 文章列表 > spring boot 工程整合mongodb,遇到的坑

spring boot 工程整合mongodb,遇到的坑

spring boot 工程整合mongodb,遇到的坑

首先说一下背景,因为其他的一个web工程有使用mongo,我想着给另外一个工程把mongo也加过来吧。也是最近做一个发送 丘比特信 的需求,觉得这个信应该是存到 mongodb。结果拿过来遇到了很大的坑,也是对版本对原理不了解吧。   

下面介绍一下引入的过程及遇到的坑和解决方案:

第一步,先说版本:

spring boot 的版本

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>

所以mongodb的版本也对应:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.3.1.RELEASE</version>
</dependency>

说一下涉及到mongo的一些类对应版本:

spring-data-mongodb-3.0.1.RELEASE

spring-boot-starter-data-mongodb-2.3.1.RELEASE

mongodb-driver-sync-4.0.4

mongodb-driver-core-4.0.4

bson-4.0.4

第二步,就是代码:

刚开始的想法是拿来即用

@Autowired
private MongoTemplate mongoTemplate;

注意:程序都起不来,因为找不到 MongoTemplate

然后自己通过@Bean创建MongoTemplate

@Beanpublic MongoClient mongoClient() {String connectionUserName = "";String connectionUserInfo = "";try {connectionUserName = URLEncoder.encode("XXX","UTF-8");connectionUserInfo = URLEncoder.encode("XXXXXX","UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}String connectionString = "mongodb://"+connectionUserName+":"+connectionUserInfo+"@XXXXXXXXX:XXXXXXXXX/XXXXXXXXX?authMechanism=SCRAM-SHA-1";return MongoClients.create(connectionString);}@Beanpublic MongoTemplate mongoTemplate() {return new MongoTemplate(mongoClient(), "XXXXXXXXX");}

注意:

网上的很多实例,连接串都是没有用户名和密码的。

"mongodb://username:password@host:port/dbname?authMechanism=SCRAM-SHA-1";

我们的密码是含有@符号,所以要encode,

username:password,这个中间的冒号一定不能encode,在这反复异常。冒号encode,提示找不到密码, 冒号不encode,提示用户名或者密码包含@或者冒号。

然后是禁用MongoDB数据库自动化配置:

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) //刚开始只排除第一个类,反复报异常

第三步,使用

Query query = new Query(Criteria.where("baseCountryCode").is(country));List<BeforeVipCupidMongo> cupidList = mongoTemplate.find(query, BeforeVipCupidMongo.class);

总结:

  1. 版本对照,spring boot 的版本 和 mongo 的版本;
  2. spring boot 禁用 mongodb 数据库自动化配置;
  3. 如果自定义MongoTemplate,需要注意 connectionString,密码如果含有@或者:,一定要encode,而username:password这个之间的:是不能encode的;
  4. 操作mongo的方式

 参考资料:

SpringBoot与MongoDB版本对照参考_mongodb和springboot版本_一恍过去的博客-CSDN博客

https://www.cnblogs.com/huifeidezhuzai/p/16352608.html

https://www.cnblogs.com/zeussbook/p/15330735.html 

详解SpringBoot整合MongoDB技术分解_独善其身有始有终的技术博客_51CTO博客